在C#中,使用JWTBuilder庫處理過期Token時,首先需要確保已經安裝了System.IdentityModel.Tokens.Jwt和Microsoft.IdentityModel.Tokens這兩個包。接下來,你可以通過以下步驟來處理過期Token:
以下是一個簡單的示例:
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
public class JwtTokenHandler
{
private readonly string _jwtSecret;
private readonly string _issuer;
private readonly string _audience;
public JwtTokenHandler(string jwtSecret, string issuer, string audience)
{
_jwtSecret = jwtSecret;
_issuer = issuer;
_audience = audience;
}
public string GenerateToken(Claim[] claims, int expirationMinutes = 60)
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSecret));
var signinCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var jwtToken = new JwtSecurityToken(
issuer: _issuer,
audience: _audience,
claims: claims,
expires: DateTime.UtcNow.AddMinutes(expirationMinutes),
signingCredentials: signinCredentials
);
return new JwtSecurityTokenHandler().WriteToken(jwtToken);
}
public ClaimsPrincipal ValidateToken(string token)
{
var validationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = _issuer,
ValidateAudience = true,
ValidAudience = _audience,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSecret)),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
var principal = jwtSecurityTokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
return principal;
}
}
在這個示例中,我們創建了一個名為JwtTokenHandler的類,它包含了生成和驗證Token的方法。GenerateToken方法用于生成一個新的Token,而ValidateToken方法用于驗證Token是否有效。如果Token過期,你可以在驗證方法中捕獲異常,然后生成一個新的Token。
以下是如何使用這個類的示例:
var jwtTokenHandler = new JwtTokenHandler("your_jwt_secret", "your_issuer", "your_audience");
// 生成一個Token
var claims = new[]
{
new Claim(ClaimTypes.Name, "John Doe"),
new Claim(ClaimTypes.Email, "john.doe@example.com")
};
var token = jwtTokenHandler.GenerateToken(claims);
// 驗證Token
try
{
var principal = jwtTokenHandler.ValidateToken(token);
Console.WriteLine("Token is valid.");
}
catch (Exception ex)
{
Console.WriteLine("Token is expired or invalid.");
// 生成一個新的Token
token = jwtTokenHandler.GenerateToken(claims);
Console.WriteLine("New token generated.");
}
這個示例首先生成一個包含用戶名和電子郵件的Token,然后嘗試驗證它。如果Token無效或已過期,將生成一個新的Token。