using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace LearningOfficer.OA.Common.Helpers { public class JwtHelper { /// /// 生成token /// /// /// /// /// /// /// /// public static string CreateToken(string uid, string secretKey, string issuer, string audience, double expires, List claims = null) { if (claims.IsNullOrEmpty()) claims = new(); claims.AddRange(new List { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.NameIdentifier, uid), }); // 2. 从 appsettings.json 中读取SecretKey var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); // 3. 选择加密算法 var algorithm = SecurityAlgorithms.HmacSha256; // 4. 生成Credentials var signingCredentials = new SigningCredentials(secret, algorithm); // 5. 根据以上,生成token var jwtSecurityToken = new JwtSecurityToken( issuer, //Issuer audience, //Audience claims, //Claims, DateTime.Now, //notBefore DateTime.Now.AddSeconds(expires), //expires signingCredentials //Credentials ); // 6. 将token变为string var token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken); return token; } } }