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