我正在尝试保护blazor客户端应用的安全,并已按照此处的说明进行操作 https://docs.microsoft.com/en-us/aspnet/core/security/blazor/?view=aspnetcore-3.0&tabs=visual-studio
让我感到困惑的是这部分
public override Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, "mrfibuli"),
}, "Fake authentication type");
var user = new ClaimsPrincipal(identity);
return Task.FromResult(new AuthenticationState(user));
}
由于授权仅用于确定要显示的UI选项,并且用户可以修改或绕过客户端检查,因此Blazor WebAssembly应用无法执行授权访问规则。
所以,如果我做对了,这就是有效的过程
答案 0 :(得分:1)
Blazor WebAssembly应用无法执行授权访问规则
那是正确的……只有服务器可以并且应该强制执行授权访问规则。在Blazor WebAssembly App中,授权仅用于UI。
反向机制在GetAuthenticationStateAsync中实现,其中 令牌已交换用户信息
GetAuthenticationStateAsync方法通常不会创建AuthenticationState对象,而是在其他位置进行设置,但是如果使用Blazor WebAssembly App,则必须创建自定义AuthenticationStateProvider并重写此方法以提供AuthenticationState对象。您应该按照以下步骤操作:
从本地商店获取令牌,例如Jwt令牌
解析Jwt令牌;它应该包含诸如名称等声明的集合。
从这些声明中创建一个ClaimsPrincipal对象,并将其传递给AuthenticationState对象的构造函数,该对象从GetAuthenticationStateAsync返回到调用对象,例如CascadingAuthenticationState组件...
希望这对您有帮助...