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>
在 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>