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);
}
}