【问题标题】:Server always returning 403 forbidden even when user has the role即使用户具有角色,服务器也总是返回 403 禁止
【发布时间】:2021-02-04 05:07:23
【问题描述】:

我刚刚在我的 asp.net Web 核心应用程序上完成了我的日志记录/注销代码,我遇到了一个问题,即在尝试访问需要特定角色的方法时,服务器总是返回错误 403 禁止。可能是什么问题?我检查了数据库,角色分配工作正常。 这是我为测试编写的方法的示例:

[Authorize(Roles = "SuperAdmin")]
[HttpGet]
[Route("Test")]
public string Test()
{
return "role checking working";
}

我的实际用户确实具有“SuperAdmin”角色,但我仍然从服务器获得禁止,顺便说一句,我确保将令牌与请求一起发送。当我尝试[Authorize] 时,检查工作正常,因为我只在登录时访问该方法。

会不会是生成令牌的代码?因为我不知道如何做那部分,我只是盲目地跟着教程

编辑: 这是我创建令牌时的claims 变量

var claims = new[]{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};

我应该添加什么?

【问题讨论】:

  • 您的令牌必须有一个ClaimsIdentity,用户角色为new Claim(ClaimTypes.Role, role)
  • @HMZ 感谢您的回复,我尝试添加您的代码但无法编译,我编辑了帖子以显示我的实际声明,如何添加角色?
  • 感谢您的回复,我按照您的指示搜索后找到了解决方案

标签: asp.net asp.net-core authentication


【解决方案1】:

找到解决方案,我以为我创建的令牌包含用户信息和他的角色,但我实际上需要手动添加它们,这里是正确的 claims 代码将角色添加到令牌。

var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserName),

new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
    };

var userRoles = await userManager.GetRolesAsync(user);
foreach (var userRole in userRoles)
{
    claims.Add(new Claim(ClaimTypes.Role, userRole));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多