ASP.NET 核心身份的 IdentityServer4 基于角色的授权 = 访问被拒绝
IdentityServer4 Role Based Authorization for ASP.NET Core Identity = Access Denied
我有一个 ASP.NET 核心客户端应用程序,它使用 IdentityServer4 作为登录服务器。客户端可以使用 [Authorize]
属性登录装饰控制器,但是如果我使用具有角色 [Authorize(Roles = "test")]
的属性,我会得到一个 Access-Denied
但是,当我解析 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")
returns false.
我通过创建一个使用 RequireClaim
的策略解决了这个问题,然后设置 Authorize
属性来使用该策略,例如 [Authorize(Policy = "RequireUserOnly")]
我有一个 ASP.NET 核心客户端应用程序,它使用 IdentityServer4 作为登录服务器。客户端可以使用 [Authorize]
属性登录装饰控制器,但是如果我使用具有角色 [Authorize(Roles = "test")]
的属性,我会得到一个 Access-Denied
但是,当我解析 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")
returns false.
我通过创建一个使用 RequireClaim
的策略解决了这个问题,然后设置 Authorize
属性来使用该策略,例如 [Authorize(Policy = "RequireUserOnly")]