【问题标题】:AAD Authorization for Blazor Server WebsiteBlazor 服务器网站的 AAD 授权
【发布时间】:2022-01-27 19:43:49
【问题描述】:

我已将代码副本推送到以下github repo

我有一个新的 dotnet 6 Blazor 服务器项目,在 VS2022 v17.0.4 中创建

我想控制根据登录到 Azure Active Directory 的用户的声明显示的 Blazor 组件。

我创建了一个具有“管理员”应用角色的应用注册,如下所示:

我有两个用户:

  1. rob.bowman(不是管理员成员)
  2. aza.rob.bowman(是管理员成员)

为了测试声明,我添加了以下内容以在 Program.cs 文件中创建策略:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy => policy.RequireClaim("App.Admin"));
});

注意:我也尝试过使用“Admin”而不是“App.Admin”的声明

我有以下用于测试的页面:

@page "/testadmin"
<h3>TestAdmin</h3>

<AuthorizeView Policy="AdminOnly">
    <p>You can only see this if you satisfy the "AdminOnly" policy.</p>
</AuthorizeView>

我的问题是,受保护的段落显示,无论我以何种用户身份登录:

为了帮助诊断,我添加了一个来自this microsoft docs 的页面,其中展示了声明。这确实显示了对 App.Admin 角色的声明

【问题讨论】:

    标签: blazor blazor-server-side claims-based-identity microsoft-identity-platform


    【解决方案1】:

    我认为你在正确的轨道上。这可能是几件事,但一旦它起作用,你就会很高兴。

    1. 首先,您能否验证您的顶级 .razor 组件中有 &lt;CascadingAuthenticationState&gt; 标记?这将确保将身份验证状态传递给您的 .razor 组件。这可能不是问题,但会是!

    2. 其次,您可以仔细检查您的身份验证政策吗?根据这个https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-6.0,您的保单需要一个名为“App.Admin”的声明。你可能想试试这个(需要一个值为“App.Admin”的角色声明):

      {
          options.AddPolicy("AdminOnly", policy => policy.RequireClaim(ClaimTypes.Role, "App.Admin"));
      });
      
      
    3. 最后,我建议在您的 .razor 组件中使用“基于角色”的授权。这将允许 AuthorizationState(在 .razor 中)由用户的 Role 声明(App.Admin 与 .)确定。当您在 Blazor 应用程序中设置身份验证时,您可以使用 options.TokenValidationParameters.RoleClaimType 配置角色声明。

    【讨论】:

    • 我相当肯定上面的#2 会起作用。 ClaimTypes.Role 定义为 http://schemas.microsoft.com/ws/2008/06/identity/claims/role,这与您的管理员用户图片中的声明相同。
    • #2 就是答案!非常感谢史蒂夫
    猜你喜欢
    • 2021-05-14
    • 2019-10-03
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多