ASP.NET 核心身份的 IdentityServer4 基于角色的授权 = 访问被拒绝

IdentityServer4 Role Based Authorization for ASP.NET Core Identity = Access Denied

我有一个 ASP.NET 核心客户端应用程序,它使用 IdentityServer4 作为登录服务器。客户端可以使用 [Authorize] 属性登录装饰控制器,但是如果我使用具有角色 [Authorize(Roles = "test")] 的属性,我会得到一个 Access-Denied

但是,当我解析 JWT 时,我可以看到用户分配了正确的角色。

{
  "nbf": xxx,
  "exp": xxx,
  "iss": "xxx",
  "aud": [
    "xxx",
    "xxx"
  ],
  "client_id": "xxx",
  "sub": "xxx",
  "auth_time": xxx,
  "idp": "xxx",
  "email": "xxx",
  "role": "test", <-------------------------------
  "scope": [
    "openid",
    "profile",
    "xxx",
    "xxx"
  ],
  "amr": [
    "xxx"
  ]
}

请确保您附加了正确的 jwt。您提供的那个看起来不错,但可能您附加请求了具有不同负载的 id_token。

即使用户角色出现在访问令牌中,它也不会被识别为角色,因为它是用户声明的一部分。 例如 User.IsInRole("test") returns false.

我通过创建一个使用 RequireClaim 的策略解决了这个问题,然后设置 Authorize 属性来使用该策略,例如 [Authorize(Policy = "RequireUserOnly")]