oauth-2.0 当用户可以在dotnet Core中拥有多个角色时(在没有Identity Server的情况下实现),处理授权的最佳方式是什么

v9tzhpje  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在尝试创建一个身份验证/授权项目,要求用户在应用程序中具有多个角色,并根据角色对每个方法进行授权。一个用户可以具有多个角色,我们不应该使用Identity Server,而应该从Dotnet核心库中进行。(将进行基于令牌的身份验证并使用JwtBearer库)
问题是创建一个具有多个角色的用户,然后根据角色授权方法。这似乎不可能通过Dotnet核心来完成,我在过去几天里一直在挣扎。没有一个微软的参考资料解释这样做。

vlf7wbxs

vlf7wbxs1#

您可以创建管理用户的User表、管理角色的Role表以及管理哪个用户具有哪个角色的USER ROLE表。
您可以通过定义策略来管理多个角色:

services.AddAuthorization(options =>
{
    options.AddPolicy("AllowedAdminAndMod", policy =>
        policy.RequireClaim(ClaimTypes.Role, "Admin", "Moderator")); 
});

用法:

[HttpGet]
[Authorize("AllowedAdminAndMod")]
public async Task<IActionResult> GetAll()
{
    var data = await Mediator.Send(new GetAllCategoriesQuerie());
    var result = new SuccessDataResult<List<CategoryDto>>(data);
    return Ok(result);
}

如果您使用的是JWT,则此方法适用。如果您希望在Service而不是Controller中进行授权,则可以使用面向方面的编程(AOP)来完成此操作。

相关问题