Blazor 服务器网站的 AAD 授权
AAD Authorization for Blazor Server Website
我已经将代码的副本推送到以下github repo
我有一个新的 dotnet 6 Blazor 服务器项目,在 VS2022 v17.0.4 中创建
我想控制根据登录到 Azure Active Directory 的用户的声明显示的 Blazor 组件。
我创建了一个具有“管理员”应用角色的应用注册,如下所示:
我有两个用户:
- rob.bowman(不是管理员的成员)
- aza.rob.bowman(是 Admin 的成员)
为了测试声明,我添加了以下内容以在 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
角色的声明
我认为您的方向是正确的。这可能是几件事,但一旦它起作用,你就会很高兴。
首先,您能否确认您的顶级 .razor 组件中有一个 <CascadingAuthenticationState>
标签?这将确保身份验证状态传递到您的 .razor 组件。这可能不是问题,但会是!
其次,你能仔细检查一下你的授权政策吗?根据此 https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-6.0,您的保单要求索赔名称为“App.Admin”。您可能想试试这个(需要一个值为“App.Admin”的 Role 声明):
{
options.AddPolicy("AdminOnly", policy => policy.RequireClaim(ClaimTypes.Role, "App.Admin"));
});
最后,我建议在您的 .razor 组件中使用“基于角色”的授权。这将允许 AuthorizationState(在 .razor 中)由用户的 Role
声明确定(App.Admin 与 . 您可以在设置身份验证时使用 options.TokenValidationParameters.RoleClaimType
配置角色声明在 Blazor 应用中。
我已经将代码的副本推送到以下github repo
我有一个新的 dotnet 6 Blazor 服务器项目,在 VS2022 v17.0.4 中创建
我想控制根据登录到 Azure Active Directory 的用户的声明显示的 Blazor 组件。
我创建了一个具有“管理员”应用角色的应用注册,如下所示:
我有两个用户:
- rob.bowman(不是管理员的成员)
- aza.rob.bowman(是 Admin 的成员)
为了测试声明,我添加了以下内容以在 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
角色的声明我认为您的方向是正确的。这可能是几件事,但一旦它起作用,你就会很高兴。
首先,您能否确认您的顶级 .razor 组件中有一个
<CascadingAuthenticationState>
标签?这将确保身份验证状态传递到您的 .razor 组件。这可能不是问题,但会是!其次,你能仔细检查一下你的授权政策吗?根据此 https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-6.0,您的保单要求索赔名称为“App.Admin”。您可能想试试这个(需要一个值为“App.Admin”的 Role 声明):
{ options.AddPolicy("AdminOnly", policy => policy.RequireClaim(ClaimTypes.Role, "App.Admin")); });
最后,我建议在您的 .razor 组件中使用“基于角色”的授权。这将允许 AuthorizationState(在 .razor 中)由用户的
Role
声明确定(App.Admin 与 . 您可以在设置身份验证时使用options.TokenValidationParameters.RoleClaimType
配置角色声明在 Blazor 应用中。