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

我有一个使用 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"

  ]

}


BIG阳
浏览 176回答 2
2回答

FFIVE

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

哈士奇WWW

即使用户角色存在于访问令牌中,它也不会被识别为角色,因为它是用户声明的一部分。例如User.IsInRole("test")返回 false。我通过创建一个策略来使用RequireClaim然后设置Authorize属性来使用该策略来解决这个问题,例如[Authorize(Policy = "RequireUserOnly")]
打开App,查看更多内容
随时随地看视频慕课网APP