有现成的"GenerateJwt"方法吗?
Is there a ready to use "GenerateJwt" method?
我正在为我的 .NET Core 项目使用 Microsoft.AspNetCore.Authentication.JwtBearer 和 System.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/
我正在为我的 .NET Core 项目使用 Microsoft.AspNetCore.Authentication.JwtBearer 和 System.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/