繁体   English   中英

无法让 Blazor WASM AAD 应用角色工作

[英]Can't Get Blazor WASM AAD App Roles To Work

因此,我按照 Microsoft 文档开始了工作:

使用 Azure Active Directory 保护 ASP.NET Core Blazor WebAssembly 托管应用程序

Azure AD 组、管理角色和用户定义的角色

Azure 方面的设置似乎很好:

这工作正常:

@page "/clients"
@inject NavigationManager navigationManager
@inject HttpClient Http
@inject AppData appData
@inject AuthenticationStateProvider AuthenticationStateProvider
@attribute [Authorize]

我已经打印了声明以查看发生了什么:

protected async override Task OnInitializedAsync()
{
    var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
    var user = authState.User;

    foreach (var claim in user.Claims)
    {
            System.Diagnostics.Debug.WriteLine(claim.Type + ":" + claim.ValueType + ":" + claim.Value);
    }
}

这是打印的行之一:

roles:http://www.w3.org/2001/XMLSchema#string:["Admin"]

所以我可以看到我在 Azure 上的应用清单中添加的 appRole 到了这里。 (为保护隐私,GUID 隐藏在下方)

"appRoles": [
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Can view everything.",
            "displayName": "Global Viewer",
            "id": "IDGOESHERE",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "value": "GlobalViewer"
        },
        {
            "allowedMemberTypes": [
                "User"
            ],
            "description": "Admins can access restricted areas.",
            "displayName": "Admin",
            "id": "IDGOESHERE",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "value": "Admin"
        }
    ],

还将我的用户添加到企业应用程序的管理员角色。

但是,在 [Authorize] 属性指令中添加角色会使我无法访问页面:(您无权访问此资源。)

attribute [Authorize(Roles = "Admin")]

这是在 Program.cs 中(我在“GUIDGOESHERE”中有实际的 GUID)

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes.Add("GUIDGOESHERE/EmployeesAccess");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("GUIDGOESHERE/AdminAccess");
    options.UserOptions.RoleClaim = "roles";
});

问题可能出在我的角色声明中。 也许问题是这个声明看起来像一个数组? 如果是这样,我该如何解决?

原来 Azure 可能比 ASP.NET 内核稍微领先一点

Azure AD 身份验证默认模板无法开箱即用,需要稍作调整。

按照此处 MS 文档中的步骤操作: Azure AD 组、管理角色和用户定义角色

长话短说:

  • 它开箱即用,只有一个角色。 例如“管理员”
  • 问题是有多个角色。
  • “角色”声明以字符串“[Admin,User]”的形式到达,该字符串与“Admin”或“User”不匹配
  • CustomUserAccount class 将角色分解为一个字符串[] object,从而解决了该问题。
  • 微软在记录解决方法方面做得很好。 (以上链接)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM