55 lines
1.9 KiB
C#
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;
|
|
}
|
|
} |