在Blazor WASM .NET-6 应用程序中实现角色身份验证时,有些人可能会遇到身份验证失败的问题。这可能是因为角色策略并未正确设置。解决此问题的一种方法是:
"AppRoles": {
"Admin": ["admin"],
"User": ["user"]
},
BuildWebHost
方法中添加以下代码:using Microsoft.AspNetCore.Authentication.Cookies;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup()
.ConfigureServices(services =>
{
services.Configure(options =>
{
options.Events = new CookieAuthenticationEvents
{
OnSigningIn = async context =>
{
var principal = context.Principal;
if (principal.Claims.Any(c => c.Type == ClaimTypes.Role))
{
return;
}
var roleClaims = new List();
if(principal.Identity.IsAuthenticated)
{
// Replace this with your own claims fetching logic
if(principal.Identity.Name == "admin")
{
roleClaims.Add(new Claim(ClaimTypes.Role, "Admin"));
}
else
{
roleClaims.Add(new Claim(ClaimTypes.Role, "User"));
}
}
if(roleClaims.Any())
{
var identity = (ClaimsIdentity)context.Principal.Identity;
identity.AddClaims(roleClaims);
}
await Task.CompletedTask;
}
};
});
});
});
AuthorizeView
组件:
You have admin access
You don't have admin access