using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; namespace Bunny.Common.Utils.Jwt; public static partial class JwtUtil { /// /// 默认发布者 /// private const string JwtKey = "这你放的是你的秘钥,必须要256位以上,否则会报错"; /// /// 默认发布者 /// private const string Issuer = "Bunny-Issuer"; /// /// 默认接受者 /// private const string Audience = "Bunny-Audience"; /// /// 默认有效时间,按天计算 /// private const int Day = 7; /// /// 判断是否过期 /// /// token /// 过期:true,未过期:false public static bool IsJwtExpired(string? jwtToken) { var tokenHandler = new JwtSecurityTokenHandler(); // Token无效直接返回过期 if (tokenHandler.ReadToken(jwtToken) is not JwtSecurityToken jwtTokenObj) return true; // 判断是否过期 return DateTime.UtcNow > jwtTokenObj.ValidTo; } /// /// 生成 SigningCredentials /// private static SigningCredentials Credentials(string jwtKey) { var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey)); return new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256Signature); } /// /// 将字典转为实体类 /// /// 字典 /// 所对应的实体类 // public static T? ConvertDictionaryToObject(Dictionary dictionary) // { // var json = JsonConvert.SerializeObject(dictionary); // // 将JSON转为对象 // return JsonConvert.DeserializeObject(json); // } public static T? ConvertDictionaryToObject(Dictionary dictionary) { var json = JsonConvert.SerializeObject(dictionary); // 将JSON转为对象 return JsonConvert.DeserializeObject(json); } /// /// 将对象转为Claim /// /// 要转换的对象 /// Claim public static IEnumerable CreateClaim(T @object) { // 将对象序列化成JSON var json = JsonConvert.SerializeObject(@object); // 将JSON复制给Claim return ParseJsonToClaimEnumerable(json); } }