From 01b7d0dec62ad23f76072b7442a20bfa8604e94d Mon Sep 17 00:00:00 2001 From: Federico Barresi Date: Thu, 18 Dec 2025 21:19:05 +0100 Subject: [PATCH] added check access token validity before refresh --- .../IdentityModel.OidcClient/RefreshTokenDelegatingHandler.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/identity-model-oidc-client/src/IdentityModel.OidcClient/RefreshTokenDelegatingHandler.cs b/identity-model-oidc-client/src/IdentityModel.OidcClient/RefreshTokenDelegatingHandler.cs index 7dd346483..f902181ed 100644 --- a/identity-model-oidc-client/src/IdentityModel.OidcClient/RefreshTokenDelegatingHandler.cs +++ b/identity-model-oidc-client/src/IdentityModel.OidcClient/RefreshTokenDelegatingHandler.cs @@ -20,6 +20,7 @@ public class RefreshTokenDelegatingHandler : DelegatingHandler private string _accessToken; private string _accessTokenType; private string _refreshToken; + private DateTime? _validUntil; private bool _disposed; @@ -120,7 +121,7 @@ public RefreshTokenDelegatingHandler(OidcClient oidcClient, string accessToken, protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var accessToken = await GetAccessTokenAsync(cancellationToken); - if (accessToken.IsMissing()) + if (accessToken.IsMissing() || (_validUntil.HasValue && _validUntil.Value < DateTime.Now)) { if (await RefreshTokensAsync(cancellationToken) == false) { @@ -182,6 +183,7 @@ private async Task RefreshTokensAsync(CancellationToken cancellationToken) if (!response.IsError) { _accessToken = response.AccessToken; + _validUntil = DateTime.Now.AddSeconds(response.ExpiresIn); if (!response.RefreshToken.IsMissing()) { _refreshToken = response.RefreshToken;