保护blazor客户端应用程序的有效程序是什么?

时间:2019-11-07 10:38:09

标签: blazor

我正在尝试保护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应用无法执行授权访问规则。

所以,如果我做对了,这就是有效的过程

  • 用户通过页面/表单发送凭据
  • api返回令牌
  • 令牌存储在本地
  • 反向机制在GetAuthenticationStateAsync中实现,在该机制中,令牌被交换为用户信息

1 个答案:

答案 0 :(得分:1)

  

Blazor WebAssembly应用无法执行授权访问规则

那是正确的……只有服务器可以并且应该强制执行授权访问规则。在Blazor WebAssembly App中,授权仅用于UI。

  

反向机制在GetAuthenticationStateAsync中实现,其中   令牌已交换用户信息

GetAuthenticationStateAsync方法通常不会创建AuthenticationState对象,而是在其他位置进行设置,但是如果使用Blazor WebAssembly App,则必须创建自定义AuthenticationStateProvider并重写此方法以提供AuthenticationState对象。您应该按照以下步骤操作:

  • 从本地商店获取令牌,例如Jwt令牌

  • 解析Jwt令牌;它应该包含诸如名称等声明的集合。

  • 从这些声明中创建一个ClaimsPrincipal对象,并将其传递给AuthenticationState对象的构造函数,该对象从GetAuthenticationStateAsync返回到调用对象,例如CascadingAuthenticationState组件...

希望这对您有帮助...