Files
emall-api/TestJwtValidation/Program.cs

79 lines
3.1 KiB
C#
Raw Normal View History

2025-10-16 15:21:52 +08:00
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
using Microsoft.IdentityModel.Tokens;
namespace TestJwtValidation
{
class Program
{
static void Main(string[] args)
{
var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIyMSIsInVuaXF1ZV9uYW1lIjoic3RyaW5nIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwibmJmIjoxNzYwNTk3MTA5LCJleHAiOjE3NjA2MDA3MDksImlhdCI6MTc2MDU5NzEwOSwiaXNzIjoiRnV0dXJlTWFpbEFQSSIsImF1ZCI6IkZ1dHVyZU1haWxDbGllbnQifQ.u-flaJioXuZfU_b-hD8_x5-gH0e9t_AkScQKOKIsAqE";
try
{
var tokenHandler = new JwtSecurityTokenHandler();
var jwtSettings = new
{
Key = "ThisIsASecretKeyForJWTTokenGenerationAndValidation123456789",
Issuer = "FutureMailAPI",
Audience = "FutureMailClient"
};
var key = Encoding.ASCII.GetBytes(jwtSettings.Key);
var validationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = true,
ValidIssuer = jwtSettings.Issuer,
ValidateAudience = true,
ValidAudience = jwtSettings.Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
// 验证JWT令牌
var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
Console.WriteLine("令牌验证成功!");
Console.WriteLine($"令牌类型: {validatedToken.GetType().Name}");
// 检查所有Claims
Console.WriteLine("\n所有Claims:");
foreach (var claim in principal.Claims)
{
Console.WriteLine($"类型: {claim.Type}, 值: {claim.Value}");
}
// 检查特定Claim
var nameIdClaim = principal.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);
Console.WriteLine($"\nNameIdentifier Claim: {nameIdClaim?.Value ?? ""}");
var userId = 0;
if (nameIdClaim != null && int.TryParse(nameIdClaim.Value, out userId))
{
Console.WriteLine($"解析的用户ID: {userId}");
}
}
catch (SecurityTokenExpiredException)
{
Console.WriteLine("令牌已过期");
}
catch (SecurityTokenInvalidSignatureException)
{
Console.WriteLine("令牌签名无效");
}
catch (SecurityTokenException ex)
{
Console.WriteLine($"令牌验证失败: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
}
}
}