【问题标题】:What is the valid procedure to secure blazor client side app?保护 blazor 客户端应用程序的有效程序是什么?
【发布时间】:2020-03-03 22:13:28
【问题描述】:

我正在尝试保护我的 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 中实现了反向机制,其中令牌用于交换用户信息

【问题讨论】:

    标签: blazor


    【解决方案1】:

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

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

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

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

    • 从本地存储中获取令牌,例如 Jwt 令牌

    • 解析 Jwt 令牌;它应该包含一系列声明,例如名称等。

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

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2020-05-17
      • 2019-12-19
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2023-03-05
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多