gpt4 book ai didi

asp.net - Blazor WASM 授权不适用于 AAD 角色

转载 作者:行者123 更新时间:2023-12-03 17:11:03 25 4
gpt4 key购买 nike

我正在尝试根据此文档后的用户定义角色设置 AAD 授权 https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/azure-active-directory-groups-and-roles?view=aspnetcore-3.1#user-defined-roles我能够在应用程序 list 中设置它并获得 API 授权。但是,当我尝试在 UI 端执行此操作时,我无法显示该声明。我做了 json 解释类(DirectoryObjects、CustomUserAccount 和 Value(由目录对象使用))。我还添加了删除组内容的 CustomUserFactory,因为我只关心角色:

        private readonly ILogger<CustomUserFactory> _logger;
private readonly IHttpClientFactory _clientFactory;

public CustomUserFactory(IAccessTokenProviderAccessor accessor,
IHttpClientFactory clientFactory,
ILogger<CustomUserFactory> logger)
: base(accessor)
{
_clientFactory = clientFactory;
_logger = logger;
}

public async override ValueTask<ClaimsPrincipal> CreateUserAsync(
CustomUserAccount account,
RemoteAuthenticationUserOptions options)
{
var initialUser = await base.CreateUserAsync(account, options);

if (initialUser.Identity.IsAuthenticated)
{
var userIdentity = (ClaimsIdentity)initialUser.Identity;

foreach (var role in account.Roles)
{
userIdentity.AddClaim(new Claim("role", role));
}


}

return initialUser;
}
然后我按照文档中提到的那样修改了 program.cs:
    builder.Services.AddMsalAuthentication<RemoteAuthenticationState,
CustomUserAccount>(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("apiaccessguid");
options.UserOptions.RoleClaim = "role";
}).AddAccountClaimsPrincipalFactory<RemoteAuthenticationState, CustomUserAccount,
CustomUserFactory>();
当那不起作用时,我尝试将其添加为一项政策,但也没有运气:
 builder.Services.AddAuthorizationCore(options =>
{
options.AddPolicy("Admin", policy =>
policy.RequireClaim("role", "admin"));
});
用于限制我在代码中尝试使用 user.IsInRole("admin") 的 View 并在 UI 中使用
<AuthorizeView Roles="admin">
<li class="nav-item px-3">
<NavLink class="nav-link" href="Admin">
Admin
</NavLink>
</li>
</AuthorizeView>
并有政策:
<AuthorizeView Policy="Admin">
<Authorized>
<p>
The user is in the 'Administrator' AAD Administrative Role
and can see this content.
</p>
</Authorized>
<NotAuthorized>
<p>
The user is NOT in the 'Administrator' role and sees this
content.
</p>
</NotAuthorized>
</AuthorizeView>
他们都没有工作。有什么我想念的吗?我还验证了 token 具有管理员角色。

最佳答案

我通过在策略选项中使用 RequireRole 让它工作。
例如,我将 app 角色添加到 list 中:

"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Reader role.",
"displayName": "Reader",
"id": "41d9ba42-456e-4471-8946-24216e5f6c64",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "Reader"
}
]
通过 RequireRole 配置策略:
builder.Services.AddAuthorizationCore(options =>
{
options.AddPolicy("app-reader", policy => policy.RequireRole("Reader"));
});
然后按以下方式使用:
<AuthorizeView Policy="app-reader">
<Authorized>
<p>
The user is in the 'Reader' Role
and can see this content.
</p>
</Authorized>
<NotAuthorized>
<p>
The user is NOT in the 'Reader' role
and sees this content.
</p>
</NotAuthorized>
</AuthorizeView>
或者,作为 Razor 页面上的一个属性:
@attribute [Authorize(Policy = "app-reader")]

关于asp.net - Blazor WASM 授权不适用于 AAD 角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63493496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com