有现成的"GenerateJwt"方法吗?

Is there a ready to use "GenerateJwt" method?

我正在为我的 .NET Core 项目使用 Microsoft.AspNetCore.Authentication.JwtBearerSystem.IdentityModel.Tokens.Jwt。在我的 Startup 文件中,我 运行 [Authorize] 注释的配置设置。当我用我自己的方法生成新令牌时,这对我来说很好用(示例)

public object GenerateToken(Dictionary<string, object> payload)
{
    DateTime tokenExpiresAt = DateTime.Now.AddMilliseconds(1); // From config
    byte[] symmetricKey = Convert.FromBase64String("secret"); // from config
    SymmetricSecurityKey symmetricSecurityKey = new SymmetricSecurityKey(symmetricKey);
    
    SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor
    {
        Claims = payload,
        Expires = tokenExpiresAt,
        SigningCredentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256Signature)
    };
    
    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
    SecurityToken securityToken = tokenHandler.CreateToken(tokenDescriptor);

    string token = tokenHandler.WriteToken(securityToken);
        
    return new { token, tokenExpiresAt };
}

令牌的验证不需要实现,因为它已通过 [Authorize] 注释完成。我想知道是否有一种方法可以用来生成令牌,而不必自己编写代码?我将生成的令牌存储到数据库中,还需要 return 到期时间。

所以是的,上面的解决方案对我来说很好,但可能是多余的:)

是否有获取令牌密码、有效负载和令牌过期时间的方法?例如。 TokenGenerator.Sign("secret", payload, tokenExpiresAt)?

Microsoft 库本身不支持颁发令牌,因此 Microsoft 库中没有您正在寻找的命令。但是,Microsoft 确实使用他们的服务 azure ad 将令牌作为身份服务器发布,这可能是他们最简单的方法。 如果您只是这样做,那么您的做法基本上没问题。而不是完整的身份验证框架,这是一个与您做非常相似事情的人的示例:https://jasonwatmore.com/post/2019/10/11/aspnet-core-3-jwt-authentication-tutorial-with-example-api

如果您希望实现自己的可以颁发令牌的完整身份验证服务。有一些相对常见的第 3 方库可以帮助您不必重新发明轮子,其中之一是 identityserver4: https://identityserver4.readthedocs.io/en/latest/index.html 这是一个完整的身份提供者解决方案。 另一个是 openiddict https://devblogs.microsoft.com/aspnet/bearer-token-authentication-in-asp-net-core/