基于角色的声明身份验证不起作用 ASP.NET Core Identity

问题描述 投票:0回答:1

我有问题:我正在使用 ASP.NET Core Identity。

用户、声明和角色之间的关系如下:用户有角色,角色有声明。

我的索赔保存在

AspNetRoleClaims
表中,角色保存在
AspNetRoles
表中,用户保存在
AspNetUsers
中。

用户通过

AspNetUserRoles
连接到角色。

现在我的用户拥有

CreateRole
权限,但是
CreateRole
端点返回 http 403 禁止错误。

我做错了什么?

请帮助我:)

这是我的

program.cs
:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("RoleModulePolicy", policy => policy.RequireClaim("RoleModule"));
    options.AddPolicy("CreateRolePolicy", policy => policy.RequireClaim("CreateRole"));
    options.AddPolicy("EditRolePolicy", policy => policy.RequireClaim("EditRole"));
    options.AddPolicy("DeleteRolePolicy", policy => policy.RequireClaim("DeleteRole"));
});

ClaimsStore.cs
文件

public static class ClaimsStore
{
    public static List<Claim> GetAllClaims()
    {
        return new List<Claim>()
        {
            new Claim("RoleModule", "Role Module"),
            new Claim("CreateRole", "Create Role"),
            new Claim("EditRole", "Edit Role"),
            new Claim("DeleteRole", "Delete Role"),
        };
    }
}

控制器:

[Authorize(Policy = "CreateRolePolicy")]
[HttpPost("[action]")]
public async Task<IActionResult> CreateRole(RoleCreateRequestModel model)
{
    var result = await _roleManagementService.CreateRole(model);

    if (result.Succeeded)
    {
        return Ok(result);
    }
    else
    {
        return BadRequest(result);
    }
}
http-status-code-403 claims-based-identity asp.net-core-identity role-base-authorization
1个回答
0
投票

考虑到一些细节的缺失,请检查一下步骤是否有错误。

1.在Program.cs中注册角色服务

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>(); 

2.直接在program.cs中注册Claims

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("CreateRolePolicy", policy => 
    policy.RequireClaim("CreateRole","Create Role"));
    ...
});

根据您的描述,您正在使用一个用户帐户,其角色声明创建角色以满足策略。以防万一,无论是AspNetUserClaims还是AspNetRoleClaims都会被检查,但为了匹配您的设计逻辑,最好遵循以下步骤。

3.创建角色。

4.将 RoleClaim 分配给角色。

5.为用户分配角色

在我本地全新的 AspNetCore Identity 项目中进行了测试,按预期工作,有任何困惑请随时分享。

© www.soinside.com 2019 - 2024. All rights reserved.