59 lines
1.9 KiB
C#
59 lines
1.9 KiB
C#
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>
|
||
/// JwtUtils,option是从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;
|
||
}
|
||
} |