Skip to content

Jwt身份认证

介绍

为了方便用户使用,我们提供了管理Jwt密钥的功能,可以自动生成密钥,并注入到JwtBearerOptions中。我们提供了 InMemoryJwtSettingStoreFileJwtSettingStoreRedisJwtSettingStore两种密钥存储方式,用户可以根据自己的需求选择合适的方式。

如何使用

首先,需要在Startup.cs中添加如下代码:

builder.Services.AddJwtAuthentication(options =>
{
    // 身份认证配置逻辑
});

builder.Services.AddNetCorePalJwt().AddInMemoryStore(); // 使用内存存储密钥

如果需要使用文件存储密钥,可以使用以下代码:

builder.Services.AddJwtAuthentication(options =>
{
    // 身份认证配置逻辑
});

builder.Services.AddNetCorePalJwt().AddFileStore("jwtsetting-filename.json"); // 使用文件存储密钥

或者使用Redis存储密钥:

builder.Services.AddJwtAuthentication(options =>
{
    // 身份认证配置逻辑
});

// 添加Redis连接
builder.Services.AddSingleton<IConnectionMultiplexer>(p => ConnectionMultiplexer.Connect(builder.Configuration.GetConnectionString("Redis")!));
builder.Services.AddNetCorePalJwt().AddRedisStore(); // 使用Redis存储密钥

生成JwtToken

在控制器中,可以使用IJwtProvider接口生成JwtToken,如下所示:

[HttpPost("/jwtlogin")]
public async Task<ResponseData<string>> JwtLogin(string name, [FromServices] IJwtProvider provider)
{
    var claims = new[]
    {
        new Claim("uid", "111"),
        new Claim("type", "client"),
        new Claim("email", "abc@efg.com"),
    };
    var jwt = await provider.GenerateJwtToken(new JwtData("issuer-x", "audience-y",
        claims,
        DateTime.Now,
        DateTime.Now.AddMinutes(1)));
    return jwt.AsResponseData();
}