Learn.VideoAnalysis/VideoAnalysisCore/Common/JwtHelper.cs

67 lines
2.4 KiB
C#

using Microsoft.IdentityModel.Tokens;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
namespace VideoAnalysisCore.Common
{
public class JwtHelper
{
public static string GetToken(AuthKeyConfig jwt, params Claim[] claims)
{
return GetToken(jwt.Issuer, jwt.Audience, jwt.Secret, jwt.Expires, claims);
}
/// <summary>
/// 生成Token
/// </summary>
/// <param name="issuer">签发人</param>
/// <param name="audience">受众</param>
/// <param name="secreKey">密钥</param>
/// <param name="expires">过期时间(单位:小时)</param>
public static string GetToken(string issuer, string audience, string secreKey, int expires, params Claim[] claims)
{
var now = DateTime.Now;
//添加用户的信息,转成一组声明,还可以写入更多用户信息声明
var claimss = new List<Claim>
{
//JWT ID 唯一标识符
new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString() ),
//发布时间戳 issued timestamp
new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64),
};
if (claims != null && claims.Length > 0)
{
claimss.AddRange(claims);
}
//下面使用 Microsoft.IdentityModel.Tokens帮助库下的类来创建JwtToken
//安全秘钥
var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secreKey));
var jwt = new JwtSecurityToken(
//jwt签发人
issuer: issuer,
//jwt受众
audience: audience,
//jwt一组声明
claims: claimss,
notBefore: now,
//jwt令牌过期时间
expires: now.AddHours(value: expires),
//签名凭证: 安全密钥、签名算法
signingCredentials: new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)
);
//生成jwt令牌(json web token)
var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
return encodedJwt;
}
}
}