79 lines
3.1 KiB
C#
79 lines
3.1 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|
|
} |