无法识别角色授权 - 带有 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的主要内容,如果未能解决你的问题,请参考以下文章

控制器无法识别 JWT 角色.net core 5

Spring Boot 资源服务器无法使用 oAuth 2 访问令牌授权角色

ASP.NET Core 3.1 中基于角色的授权,带有 Identity 和 ExternalLogin

带有权限代码的 ASP.NET MVC 4 自定义授权属性(无角色)

带有参数的 ASP.NET MVC 授权属性

Auth0,带有授权扩展和 ASP.NET 授权