ASP.NET Core Identity的IdentityServer4基于角色的授权=访问被拒绝

时间:2019-04-26 14:48:45

标签: c# jwt identityserver4 access-token asp.net-core-2.1

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

但是,当我解析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"
  ]
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

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