111
This commit is contained in:
55
Service/Application.Service.Pub/Jwt/JwtTool.cs
Normal file
55
Service/Application.Service.Pub/Jwt/JwtTool.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user