Blazor Web Assembly 独立 JWT 身份验证

Blazor Web Assembly Standalone JWT Authentication

在 blazor wasm 独立应用程序的自定义身份验证状态提供程序中,我看到 articles 作为第二个参数“假身份验证类型”写入。即

List<Claim> claims = new();
ClaimsIdentity claimsId; 
claimsId = new ClaimsIdentity(claims, "Fake authentication type");

我知道在 blazor 服务器独立项目中,您可以使用 nuget 包 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme 而不是使用占位符作为第二个参数。我想使用这个包,但了解到它与 web assembly 不兼容。是否有类似 wasm 的 Jwt 包的包?如果不是,是否有理由需要为第二个参数插入占位符?

如果我理解你的问题,你想使用 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme 代替“假身份验证类型”,但不能引用 Nuget 包。您不需要包含该包,像“假身份验证类型”这样的 hard-coded/fake 字符串就可以了。无论如何,您引用的 AuthenticationScheme 参数只是一个常量字符串“Bearer”。

您引用的文章是为您的 Blazor 应用创建自定义身份验证状态提供程序。例如,假设您只允许用户在天气晴朗时登录(晴天是您自定义的身份验证状态)。您可以像这样实现您的自定义身份验证状态提供程序:

public class CustomAuthStateProvider : AuthenticationStateProvider
{
    public override Task<AuthenticationState> GetAuthenticationStateAsync()
    {
        var weather = _weatherApi.GetWeather();
        if (weather == "Sunny")
        {
          // sunny day - return a "logged in" identity
          var fakeLoggedInIdentity = new ClaimsIdentity(new[]
          {
              new Claim(ClaimTypes.Name, "mrfibuli"),
          }, "Fake authentication type");

          var user = new ClaimsPrincipal(fakeLoggedInIdentity);
          
          return Task.FromResult(new AuthenticationState(user));
        }
        else 
        {
           // rainy day - we are not logged in
           var notLogginInState 
                 = new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
            return Task.FromResult(notLoggedInState);
        }
}

上面的代码将允许您的 Blazor 应用程序在晴天(自定义状态)时“登录”。此自定义身份验证状态提供程序将连接到下面的 Blazor AuthorizeView 组件,其中“mrfibuli”作为 Name.

<AuthorizeView>
    <h1>Hello, @context.User.Identity.Name!</h1>
    <p>You can only see this content if you're authenticated.</p>
</AuthorizeView>