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

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

我有一个ASP.NET Core客户端应用程序,它使用IdentityServer4作为登录服务器。客户端可以使用属性[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"
  ]
}
c# jwt identityserver4 access-token asp.net-core-2.1
2个回答
0
投票

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


-1
投票

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

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

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