修改接口
This commit is contained in:
		
							
								
								
									
										79
									
								
								TestJwtValidation/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								TestJwtValidation/Program.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
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}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user