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); } /// /// 生成Token /// /// 签发人 /// 受众 /// 密钥 /// 过期时间(单位:小时) public static string GetToken(string issuer, string audience, string secreKey, int expires, params Claim[] claims) { var now = DateTime.Now; //添加用户的信息,转成一组声明,还可以写入更多用户信息声明 var claimss = new List { //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; } } }