【发布时间】:2021-04-16 08:12:48
【问题描述】:
我对 Blazor 很陌生,我正在尝试了解身份验证和授权。到目前为止,我所做的是阅读文档 Authentication and Authorization in ASP.NET Core Blazor 和 Rolebased Authorization in Asp.NET Core。我设法让身份验证运行,但我正在努力获得授权。我想将每个访问我的服务器端应用程序的 Windows 用户存储在数据库中,并说 User1 是管理员,User2 是编辑器等,并向用户显示页面的不同区域。
我能够读出 Windows 用户,但直到现在我无法设置角色。我用claims尝试过这样的事情:
public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity(new[]
{
new Claim( type: ClaimTypes.Name, value: @"User1")
}, "Editor");
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
}
我把它附加到ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddAuthorizationCore();
services.AddScoped<AuthenticationStateProvider, CustomAuthenticationStateProvider>();
}
据我了解,此功能无法使用
<AuthorizeView Roles="Editor">
<p>Show User Identity: @context.User.Identity</p>
</AuthorizeView>
在razor 页面上,因为Roles 根本不是Claims。但是我如何告诉我的应用程序 User1 在角色“编辑器”中,而 User2 在角色“管理员”中?还是有另一种方式来询问用户声明并向用户显示页面的不同区域?我错过了什么吗?
【问题讨论】:
标签: c# asp.net asp.net-core blazor-server-side