Files
Gatedge.NewOrientLandMark.BOS/Gatedge.ScanCode/Utils/JwtUtils.cs

59 lines
1.9 KiB
C#
Raw Normal View History

2025-11-18 17:43:12 +08:00
using Gatedge.K3Cloud.Utils.Model.K3Request;
using Gatedge.ScanCode.Options;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace Gatedge.ScanCode.Utils;
/// <summary>
/// JWT帮助类
/// </summary>
public class JwtUtils
{
private readonly JwtOption _option;
/// <summary>
/// JwtUtilsoption是从ICO容器中拿到的对象
/// </summary>
public JwtUtils(JwtOption option)
{
_option = option;
}
/// <summary>
/// 创建Token
/// </summary>
/// <param name="loginInfo"></param>
/// <returns></returns>
public string CreateToken(LoginInfo loginInfo)
{
// 1. 定义需要使用到的Claims
var claims = new[]
{
new Claim("UserName", loginInfo.UserName),
new Claim("LCId", loginInfo.LCId.ToString()),
new Claim("ServerUrl", loginInfo.ServerUrl),
new Claim("DBID", loginInfo.DBID),
new Claim("orgNum", loginInfo.OrgNum),
};
// 2. 从 appsettings.json 中读取SecretKey
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_option.SecretKey));
// 3. 选择加密算法
var algorithm = SecurityAlgorithms.HmacSha256;
// 4. 生成Credentials
var signingCredentials = new SigningCredentials(secretKey, algorithm);
// 5. 根据以上生成token
var jwtSecurityToken = new JwtSecurityToken(
_option.Issuer, //Issuer
_option.Audience, //Audience
claims, //Claims,
DateTime.Now, //notBefore
DateTime.Now.AddSeconds(_option.FailureTime), //expires
signingCredentials //Credentials
);
// 6. 将token变为string
var token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
return token;
}
}