using System.IdentityModel.Tokens.Jwt; using System.Text; using Microsoft.IdentityModel.Tokens; namespace Application.Service.Pub; public class JwtTool { public static async Task ParseWithValidationAsync( string jwtToken, TokenValidationParameters validationParameters) { if (string.IsNullOrWhiteSpace(jwtToken)) throw new ArgumentNullException(nameof(jwtToken)); if (validationParameters == null) throw new ArgumentNullException(nameof(validationParameters)); var handler = new JwtSecurityTokenHandler(); // 异步验证并解析 return await handler.ValidateTokenAsync(jwtToken, validationParameters); } public static async Task ParseWithSecretKeyAsync(string jwtToken, string secretKey) { var validationParams = new TokenValidationParameters { // 必须配置:密钥 IssuerSigningKey = (SecurityKey) new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)), // 验证签名(必须开启) ValidateIssuerSigningKey = true, // 根据你的 JWT 配置开启/关闭 ValidateIssuer = false, // 是否验证签发者 ValidateAudience = false, // 是否验证受众 ValidateLifetime = false // 是否验证过期时间(默认开启) }; var result = await ParseWithValidationAsync(jwtToken, validationParams); return result.IsValid ? result.SecurityToken as JwtSecurityToken : null; } public static async Task< object> GetJwtData(string jwtToken, string secretKey,string key) { var token = await ParseWithSecretKeyAsync(jwtToken,secretKey); var data = token.Payload; if (data.TryGetValue(key, out object result)) { return result; } return null; } }