Skip to content

Commit b377400

Browse files
authored
Merge pull request #20 from WeihanLi/dev
1.2.0 preview 7
2 parents 99e4cd3 + f78900b commit b377400

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/WeihanLi.Web.Extensions/Authorization/Jwt/JwtTokenOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class JwtTokenOptions
7373

7474
internal SigningCredentials SigningCredentials { get; set; }
7575

76-
internal TokenValidationParameters GetTokenValidationParameters(Action<TokenValidationParameters> parametersAction = null)
76+
public TokenValidationParameters GetTokenValidationParameters(Action<TokenValidationParameters> parametersAction = null)
7777
{
7878
var parameters = new TokenValidationParameters
7979
{

src/WeihanLi.Web.Extensions/Authorization/Jwt/JwtTokenService.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,21 @@ public class JwtTokenService : ITokenService
1414
{
1515
private readonly JwtSecurityTokenHandler _tokenHandler = new();
1616
private readonly JwtTokenOptions _tokenOptions;
17-
private readonly Lazy<TokenValidationParameters> _lazyTokenValidationParameters;
17+
18+
private readonly Lazy<TokenValidationParameters> _lazyTokenValidationParameters,
19+
_lazyRefreshTokenValidationParameters;
1820

1921
public JwtTokenService(IOptions<JwtTokenOptions> tokenOptions)
2022
{
2123
_tokenOptions = tokenOptions.Value;
22-
_lazyTokenValidationParameters = new(() => _tokenOptions.GetTokenValidationParameters());
24+
_lazyTokenValidationParameters = new(() =>
25+
_tokenOptions.GetTokenValidationParameters());
26+
_lazyRefreshTokenValidationParameters = new(() =>
27+
_tokenOptions.GetTokenValidationParameters(parameters =>
28+
{
29+
parameters.ValidAudience = GetRefreshTokenAudience();
30+
})
31+
);
2332
}
2433

2534
public Task<TokenEntity> GenerateToken(params Claim[] claims)
@@ -32,13 +41,7 @@ public Task<TokenValidationResult> ValidateToken(string token)
3241

3342
public virtual async Task<TokenEntity> RefreshToken(string refreshToken)
3443
{
35-
// TODO: cache validation parameters
36-
var validationParameters = _tokenOptions.GetTokenValidationParameters(parameters =>
37-
{
38-
parameters.ValidAudience = GetRefreshTokenAudience();
39-
});
40-
41-
var refreshTokenValidateResult = await _tokenHandler.ValidateTokenAsync(refreshToken, validationParameters);
44+
var refreshTokenValidateResult = await _tokenHandler.ValidateTokenAsync(refreshToken, _lazyRefreshTokenValidationParameters.Value);
4245
if (!refreshTokenValidateResult.IsValid)
4346
{
4447
throw new InvalidOperationException("Invalid RefreshToken", refreshTokenValidateResult.Exception);
@@ -54,7 +57,7 @@ protected virtual Task<string> GetRefreshToken(Claim[] claims)
5457
audience: GetRefreshTokenAudience(),
5558
claims: claims,
5659
notBefore: now.UtcDateTime,
57-
expires: now.Add(_tokenOptions.ValidFor).UtcDateTime,
60+
expires: now.Add(_tokenOptions.RefreshTokenValidFor).UtcDateTime,
5861
signingCredentials: _tokenOptions.SigningCredentials);
5962
var encodedJwt = _tokenHandler.WriteToken(jwt);
6063
return encodedJwt.WrapTask();

0 commit comments

Comments
 (0)