Files
Kg.SeaTime/Service/Application.Service.Pub/Jwt/JwtTool.cs
Putoo 784bc66ef6 111
2026-05-20 18:32:54 +08:00

55 lines
1.9 KiB
C#

using System.IdentityModel.Tokens.Jwt;
using System.Text;
using Microsoft.IdentityModel.Tokens;
namespace Application.Service.Pub;
public class JwtTool
{
public static async Task<TokenValidationResult> 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<JwtSecurityToken?> 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;
}
}