无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5
Posted
技术标签:
【中文标题】无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5【英文标题】:Role Authorization Not Recognized - ASPNET CORE 5 with IdentityServer4 Cookie/Oidc Authentication 【发布时间】:2021-06-16 18:23:33 【问题描述】:我已经使用 Cookie/Oidc 身份验证通过 IdentityServer4 实现了登录,直接进入了我可以在端点看到的点,我对角色有必要的声明,如下图所示:
claims image
role
如您所见,Authorize 中的 Roles 部分已被注释掉,如果我将其添加回来,我将永远不会到达端点并且我会被重定向到 Account/AccessDenied,我还尝试了其他方法,例如 UseAuthorization 中的 requireRole/requireClaim 策略,但没有从字面上看似乎没有任何效果,我只是不明白......
这是我来自客户端的代码:
public void ConfigureServices(IServiceCollection services)
services.AddAuthentication(config =>
config.DefaultScheme = "Cookie";
config.DefaultChallengeScheme = "oidc";
)
.AddCookie("Cookie")
.AddOpenIdConnect("oidc", config =>
config.Authority = "https://localhost:5005";
config.ClientId = "client_id_mvc";
config.ClientSecret = "client_secret_mvc";
config.SaveTokens = true;
config.ResponseType = "code";
config.GetClaimsFromUserInfoEndpoint = true;
config.Scope.Add("roles");
config.ClaimActions.MapUniqueJsonKey("role", "role", "role");
config.TokenValidationParameters.NameClaimType = "name";
config.TokenValidationParameters.RoleClaimType = "role";
);
services.AddControllersWithViews();
请帮忙:D
【问题讨论】:
令牌中您的角色声明的名称是http://schemas.microsoft.com/ws/2008/06/identity/claims/role
,但您将 OIDC 配置为查找名为 role
的声明。所以他们不匹配,因此你不会通过。
@Sasan 令人难以置信....我不敢相信我错过了....刚刚测试过并且有效,非常感谢!如何将您的回复标记为答案?
【参考方案1】:
令牌中的角色声明名称为 http://schemas.microsoft.com/ws/2008/06/identity/claims/role
,但您将 OIDC 配置为查找名为 role
的声明。所以他们不匹配,因此你不会通过。
【讨论】:
以上是关于无法识别角色授权 - 带有 IdentityServer4 Cookie/Oidc 身份验证的 ASPNET CORE 5的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 资源服务器无法使用 oAuth 2 访问令牌授权角色
ASP.NET Core 3.1 中基于角色的授权,带有 Identity 和 ExternalLogin