feat(infra): implement GetPrincipalFromExpiredToken in JwtService
This commit is contained in:
@@ -19,6 +19,31 @@ public sealed class JwtService : IJwtService
|
|||||||
_options = options;
|
_options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public ClaimsPrincipal GetPrincipalFromExpiredToken(string accessToken)
|
||||||
|
{
|
||||||
|
var parameters = new TokenValidationParameters
|
||||||
|
{
|
||||||
|
ValidateIssuer = true,
|
||||||
|
ValidIssuer = _options.Issuer,
|
||||||
|
ValidateAudience = true,
|
||||||
|
ValidAudience = _options.Audience,
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new RsaSecurityKey(_rsa),
|
||||||
|
ValidateLifetime = false, // Key: accept expired tokens in refresh flow
|
||||||
|
ClockSkew = TimeSpan.Zero,
|
||||||
|
};
|
||||||
|
|
||||||
|
var handler = new JwtSecurityTokenHandler();
|
||||||
|
var principal = handler.ValidateToken(accessToken, parameters, out var securityToken);
|
||||||
|
|
||||||
|
if (securityToken is not JwtSecurityToken jwt ||
|
||||||
|
!jwt.Header.Alg.Equals(SecurityAlgorithms.RsaSha256, StringComparison.OrdinalIgnoreCase))
|
||||||
|
throw new SecurityTokenException("Invalid token algorithm");
|
||||||
|
|
||||||
|
return principal;
|
||||||
|
}
|
||||||
|
|
||||||
public string GenerateAccessToken(Usuario usuario)
|
public string GenerateAccessToken(Usuario usuario)
|
||||||
{
|
{
|
||||||
var signingKey = new RsaSecurityKey(_rsa);
|
var signingKey = new RsaSecurityKey(_rsa);
|
||||||
|
|||||||
Reference in New Issue
Block a user