我有一个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"
]
}
请确保您附加了正确的jwt。你提出的那个看起来很好,但可能你附加请求具有不同有效负载的id_token。
即使这样,用户角色也存在于访问令牌中,因此它不被识别为角色,因为它是用户声明的一部分。例如,User.IsInRole("test")
返回false。
我通过创建使用RequireClaim
的策略解决了这个问题,然后设置Authorize
属性来使用策略,例如[Authorize(Policy = "RequireUserOnly")]