ASP.NET Azure AD / Entra 身份验证 - 令牌中的应用程序角色,但未分配给主体

问题描述 投票:0回答:1

我正在使用 Azure AD/Entra 进行 OIDC 身份验证:

    services
        .AddAuthentication()
        .AddMicrosoftIdentityWebApp(
            configuration.GetSection("AzureAd"),
            openIdConnectScheme: "MySchemeName",
            cookieScheme: null,
            displayName: "MySchemeName");

我的应用程序注册已定义应用程序角色,并分配给用户。

在我的

ChallengeResult
回调中,我可以将角色视为从
ExternalLoginInfo
方法返回的
Principal.Claims
属性中的
signInManager.GetExternalLoginInfoAsync()
对象中的声明。很明显,令牌中的角色是正确的。

但是,我的政策定义为:

        options.AddPolicy("MyPolicy", policy =>
        {
            policy.RequireAuthenticatedUser();
            policy.RequireClaim(ClaimTypes.Role, "AzureAppRoleName");
        });

当我导航到此策略定义为

[Authorize(Policy = "MyPolicy")]
的页面时,我收到 403。

如果我在某些自定义中间件中设置断点,我可以看到

HttpContext.User
有一些声明,但没有角色声明。

如何确保令牌中返回的角色声明被分配给委托人?

asp.net azure-active-directory asp.net-authorization asp.net-authentication
1个回答
0
投票

请参阅下面的代码,当我使用

mypolicy
时一切正常,但如果我在控制器操作方法中使用
[Authorize(Policy = "mypolicy2")]
,我会遇到访问被拒绝的问题。

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("mypolicy", policy => policy.RequireRole("Tiny.AccessEndpoint"));
    //options.AddPolicy("mypolicy2", policy => policy.RequireClaim(ClaimTypes.Role, "Tiny.AccessEndpoint"));

});

所以恐怕你应该将

policy.RequireClaim(ClaimTypes.Role
更改为
policy.RequireRole

© www.soinside.com 2019 - 2024. All rights reserved.