55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using Masuit.Tools;
|
||
using Microsoft.Extensions.Configuration;
|
||
using Microsoft.IdentityModel.Tokens;
|
||
using System.IdentityModel.Tokens.Jwt;
|
||
using System.Security.Claims;
|
||
using System.Text;
|
||
|
||
namespace AI.Common.Helpers
|
||
{
|
||
public class JwtHelper
|
||
{
|
||
private readonly IConfiguration _configuration;
|
||
|
||
public JwtHelper(IConfiguration configuration)
|
||
{
|
||
_configuration = configuration;
|
||
}
|
||
|
||
public string CreateToken(string uid, List<Claim> claims = null)
|
||
{
|
||
if (claims.IsNullOrEmpty())
|
||
claims = new();
|
||
claims.AddRange(new List<Claim>
|
||
{
|
||
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
||
new Claim(ClaimTypes.NameIdentifier, uid),
|
||
});
|
||
|
||
// 2. 从 appsettings.json 中读取SecretKey
|
||
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
|
||
|
||
// 3. 选择加密算法
|
||
var algorithm = SecurityAlgorithms.HmacSha256;
|
||
|
||
// 4. 生成Credentials
|
||
var signingCredentials = new SigningCredentials(secretKey, algorithm);
|
||
|
||
// 5. 根据以上,生成token
|
||
var jwtSecurityToken = new JwtSecurityToken(
|
||
_configuration["Jwt:Issuer"], //Issuer
|
||
_configuration["Jwt:Audience"], //Audience
|
||
claims, //Claims,
|
||
DateTime.Now, //notBefore
|
||
DateTime.Now.AddSeconds(_configuration["Jwt:Expires"].ToDouble()), //expires
|
||
signingCredentials //Credentials
|
||
);
|
||
|
||
// 6. 将token变为string
|
||
var token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
|
||
|
||
return token;
|
||
}
|
||
}
|
||
}
|