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}"); } } } }