From 554750423388da7c1febce4d74a3efcb99ca55b6 Mon Sep 17 00:00:00 2001 From: Damian Hickey Date: Fri, 20 Feb 2026 18:15:19 +0100 Subject: [PATCH] Add CT parameter to IRefreshTokenService and ITokenRevocationResponseGenerator, flow through all implementations and tests --- .../Endpoints/TokenRevocationEndpoint.cs | 2 +- .../Default/TokenResponseGenerator.cs | 4 +-- .../TokenRevocationResponseGenerator.cs | 30 +++++++--------- .../ITokenRevocationResponseGenerator.cs | 3 +- .../Default/DefaultRefreshTokenService.cs | 25 ++++++------- .../ServerSideSessionRefreshTokenService.cs | 8 ++--- .../Services/IRefreshTokenService.cs | 11 ++++-- .../Default/IntrospectionRequestValidator.cs | 8 ++--- .../Default/TokenRequestValidator.cs | 2 +- .../Hosting/ServerSideSessionTests.cs | 16 ++++----- .../DefaultRefreshTokenServiceTests.cs | 36 +++++++++---------- 11 files changed, 71 insertions(+), 74 deletions(-) diff --git a/identity-server/src/IdentityServer/Endpoints/TokenRevocationEndpoint.cs b/identity-server/src/IdentityServer/Endpoints/TokenRevocationEndpoint.cs index d36073bf7..d32e9e948 100644 --- a/identity-server/src/IdentityServer/Endpoints/TokenRevocationEndpoint.cs +++ b/identity-server/src/IdentityServer/Endpoints/TokenRevocationEndpoint.cs @@ -112,7 +112,7 @@ internal class TokenRevocationEndpoint : IEndpointHandler } _logger.LogTrace("Calling into token revocation response generator: {type}", _responseGenerator.GetType().FullName); - var response = await _responseGenerator.ProcessAsync(requestValidationResult); + var response = await _responseGenerator.ProcessAsync(requestValidationResult, context.RequestAborted); if (response.Success) { diff --git a/identity-server/src/IdentityServer/ResponseHandling/Default/TokenResponseGenerator.cs b/identity-server/src/IdentityServer/ResponseHandling/Default/TokenResponseGenerator.cs index 12a6a2b3a..d307dc96f 100644 --- a/identity-server/src/IdentityServer/ResponseHandling/Default/TokenResponseGenerator.cs +++ b/identity-server/src/IdentityServer/ResponseHandling/Default/TokenResponseGenerator.cs @@ -216,7 +216,7 @@ public class TokenResponseGenerator : ITokenResponseGenerator RefreshToken = request.ValidatedRequest.RefreshToken, Client = request.ValidatedRequest.Client, MustUpdate = mustUpdate - }); + }, ct); return new TokenResponse { @@ -449,7 +449,7 @@ public class TokenResponseGenerator : ITokenResponseGenerator RequestedResourceIndicator = request.RequestedResourceIndicator, ProofType = request.ProofType }; - var refreshToken = await RefreshTokenService.CreateRefreshTokenAsync(rtRequest); + var refreshToken = await RefreshTokenService.CreateRefreshTokenAsync(rtRequest, ct); return (accessToken, refreshToken); } diff --git a/identity-server/src/IdentityServer/ResponseHandling/Default/TokenRevocationResponseGenerator.cs b/identity-server/src/IdentityServer/ResponseHandling/Default/TokenRevocationResponseGenerator.cs index f47808aab..f144f59c6 100644 --- a/identity-server/src/IdentityServer/ResponseHandling/Default/TokenRevocationResponseGenerator.cs +++ b/identity-server/src/IdentityServer/ResponseHandling/Default/TokenRevocationResponseGenerator.cs @@ -51,12 +51,8 @@ public class TokenRevocationResponseGenerator : ITokenRevocationResponseGenerato Logger = logger; } - /// - /// Creates the revocation endpoint response and processes the revocation request. - /// - /// The userinfo request validation result. - /// - public virtual async Task ProcessAsync(TokenRevocationRequestValidationResult validationResult) + /// + public virtual async Task ProcessAsync(TokenRevocationRequestValidationResult validationResult, CT ct) { using var activity = Tracing.BasicActivitySource.StartActivity("TokenRevocationResponseGenerator.Process"); @@ -70,22 +66,22 @@ public class TokenRevocationResponseGenerator : ITokenRevocationResponseGenerato if (validationResult.TokenTypeHint == Constants.TokenTypeHints.AccessToken) { Logger.LogTrace("Hint was for access token"); - response.Success = await RevokeAccessTokenAsync(validationResult); + response.Success = await RevokeAccessTokenAsync(validationResult, ct); } else if (validationResult.TokenTypeHint == Constants.TokenTypeHints.RefreshToken) { Logger.LogTrace("Hint was for refresh token"); - response.Success = await RevokeRefreshTokenAsync(validationResult); + response.Success = await RevokeRefreshTokenAsync(validationResult, ct); } else { Logger.LogTrace("No hint for token type"); - response.Success = await RevokeAccessTokenAsync(validationResult); + response.Success = await RevokeAccessTokenAsync(validationResult, ct); if (!response.Success) { - response.Success = await RevokeRefreshTokenAsync(validationResult); + response.Success = await RevokeRefreshTokenAsync(validationResult, ct); response.TokenType = Constants.TokenTypeHints.RefreshToken; } else @@ -100,16 +96,16 @@ public class TokenRevocationResponseGenerator : ITokenRevocationResponseGenerato /// /// Revoke access token only if it belongs to client doing the request. /// - protected virtual async Task RevokeAccessTokenAsync(TokenRevocationRequestValidationResult validationResult) + protected virtual async Task RevokeAccessTokenAsync(TokenRevocationRequestValidationResult validationResult, CT ct) { - var token = await ReferenceTokenStore.GetReferenceTokenAsync(validationResult.Token, default); + var token = await ReferenceTokenStore.GetReferenceTokenAsync(validationResult.Token, ct); if (token != null) { if (token.ClientId == validationResult.Client.ClientId) { Logger.LogDebug("Access token revoked"); - await ReferenceTokenStore.RemoveReferenceTokenAsync(validationResult.Token, default); + await ReferenceTokenStore.RemoveReferenceTokenAsync(validationResult.Token, ct); } else { @@ -125,17 +121,17 @@ public class TokenRevocationResponseGenerator : ITokenRevocationResponseGenerato /// /// Revoke refresh token only if it belongs to client doing the request /// - protected virtual async Task RevokeRefreshTokenAsync(TokenRevocationRequestValidationResult validationResult) + protected virtual async Task RevokeRefreshTokenAsync(TokenRevocationRequestValidationResult validationResult, CT ct) { - var token = await RefreshTokenStore.GetRefreshTokenAsync(validationResult.Token, default); + var token = await RefreshTokenStore.GetRefreshTokenAsync(validationResult.Token, ct); if (token != null) { if (token.ClientId == validationResult.Client.ClientId) { Logger.LogDebug("Refresh token revoked"); - await RefreshTokenStore.RemoveRefreshTokenAsync(validationResult.Token, default); - await ReferenceTokenStore.RemoveReferenceTokensAsync(token.SubjectId, token.ClientId, token.SessionId, default); + await RefreshTokenStore.RemoveRefreshTokenAsync(validationResult.Token, ct); + await ReferenceTokenStore.RemoveReferenceTokensAsync(token.SubjectId, token.ClientId, token.SessionId, ct); } else { diff --git a/identity-server/src/IdentityServer/ResponseHandling/ITokenRevocationResponseGenerator.cs b/identity-server/src/IdentityServer/ResponseHandling/ITokenRevocationResponseGenerator.cs index 5f343cd0a..665112fb5 100644 --- a/identity-server/src/IdentityServer/ResponseHandling/ITokenRevocationResponseGenerator.cs +++ b/identity-server/src/IdentityServer/ResponseHandling/ITokenRevocationResponseGenerator.cs @@ -15,6 +15,7 @@ public interface ITokenRevocationResponseGenerator /// Creates the revocation endpoint response and processes the revocation request. /// /// The userinfo request validation result. + /// The cancellation token. /// - Task ProcessAsync(TokenRevocationRequestValidationResult validationResult); + Task ProcessAsync(TokenRevocationRequestValidationResult validationResult, CT ct); } diff --git a/identity-server/src/IdentityServer/Services/Default/DefaultRefreshTokenService.cs b/identity-server/src/IdentityServer/Services/Default/DefaultRefreshTokenService.cs index e994b83c7..1dce8591a 100644 --- a/identity-server/src/IdentityServer/Services/Default/DefaultRefreshTokenService.cs +++ b/identity-server/src/IdentityServer/Services/Default/DefaultRefreshTokenService.cs @@ -66,13 +66,8 @@ public class DefaultRefreshTokenService : IRefreshTokenService Logger = logger; } - /// - /// Validates a refresh token - /// - /// The token handle. - /// The client. - /// - public virtual async Task ValidateRefreshTokenAsync(string tokenHandle, Client client) + /// + public virtual async Task ValidateRefreshTokenAsync(string tokenHandle, Client client, CT ct) { using var activity = Tracing.ServiceActivitySource.StartActivity("DefaultRefreshTokenService.ValidateRefreshToken"); @@ -87,7 +82,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService ///////////////////////////////////////////// // check if refresh token is valid ///////////////////////////////////////////// - var refreshToken = await RefreshTokenStore.GetRefreshTokenAsync(tokenHandle, default); + var refreshToken = await RefreshTokenStore.GetRefreshTokenAsync(tokenHandle, ct); if (refreshToken == null) { Logger.LogWarning("Invalid refresh token"); @@ -174,7 +169,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService /// /// The refresh token handle /// - public virtual async Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request) + public virtual async Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request, CT ct) { using var activity = Tracing.ServiceActivitySource.StartActivity("DefaultRefreshTokenService.CreateRefreshToken"); @@ -218,7 +213,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService }; refreshToken.SetAccessToken(request.AccessToken, request.RequestedResourceIndicator); - var handle = await RefreshTokenStore.StoreRefreshTokenAsync(refreshToken, default); + var handle = await RefreshTokenStore.StoreRefreshTokenAsync(refreshToken, ct); return handle; } @@ -228,7 +223,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService /// /// The refresh token handle /// - public virtual async Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request) + public virtual async Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request, CT ct) { using var activity = Tracing.ServiceActivitySource.StartActivity("DefaultTokenCreationService.UpdateRefreshToken"); @@ -245,7 +240,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService { Logger.LogDebug("Token usage is one-time only and refresh behavior is delete. Deleting current handle, and generating new handle"); - await RefreshTokenStore.RemoveRefreshTokenAsync(handle, default); + await RefreshTokenStore.RemoveRefreshTokenAsync(handle, ct); } else { @@ -255,7 +250,7 @@ public class DefaultRefreshTokenService : IRefreshTokenService if (request.RefreshToken.ConsumedTime == null) { request.RefreshToken.ConsumedTime = TimeProvider.GetUtcNow().UtcDateTime; - await RefreshTokenStore.UpdateRefreshTokenAsync(handle, request.RefreshToken, default); + await RefreshTokenStore.UpdateRefreshTokenAsync(handle, request.RefreshToken, ct); } } @@ -292,12 +287,12 @@ public class DefaultRefreshTokenService : IRefreshTokenService { // set it to null so that we save non-consumed token request.RefreshToken.ConsumedTime = null; - handle = await RefreshTokenStore.StoreRefreshTokenAsync(request.RefreshToken, default); + handle = await RefreshTokenStore.StoreRefreshTokenAsync(request.RefreshToken, ct); Logger.LogDebug("Created refresh token in store"); } else if (needsUpdate) { - await RefreshTokenStore.UpdateRefreshTokenAsync(handle, request.RefreshToken, default); + await RefreshTokenStore.UpdateRefreshTokenAsync(handle, request.RefreshToken, ct); Logger.LogDebug("Updated refresh token in store"); } else diff --git a/identity-server/src/IdentityServer/Services/Default/ServerSideSessionRefreshTokenService.cs b/identity-server/src/IdentityServer/Services/Default/ServerSideSessionRefreshTokenService.cs index f323cd464..2b20ea0a1 100644 --- a/identity-server/src/IdentityServer/Services/Default/ServerSideSessionRefreshTokenService.cs +++ b/identity-server/src/IdentityServer/Services/Default/ServerSideSessionRefreshTokenService.cs @@ -43,9 +43,9 @@ internal class ServerSideSessionRefreshTokenService : IRefreshTokenService /// - public virtual async Task ValidateRefreshTokenAsync(string tokenHandle, Client client) + public virtual async Task ValidateRefreshTokenAsync(string tokenHandle, Client client, CT ct) { - var result = await Inner.ValidateRefreshTokenAsync(tokenHandle, client); + var result = await Inner.ValidateRefreshTokenAsync(tokenHandle, client, ct); using var activity = Tracing.ServiceActivitySource.StartActivity("ServerSideSessionRefreshTokenService.ValidateRefreshToken"); @@ -69,8 +69,8 @@ internal class ServerSideSessionRefreshTokenService : IRefreshTokenService } /// - public Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request) => Inner.CreateRefreshTokenAsync(request); + public Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request, CT ct) => Inner.CreateRefreshTokenAsync(request, ct); /// - public Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request) => Inner.UpdateRefreshTokenAsync(request); + public Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request, CT ct) => Inner.UpdateRefreshTokenAsync(request, ct); } diff --git a/identity-server/src/IdentityServer/Services/IRefreshTokenService.cs b/identity-server/src/IdentityServer/Services/IRefreshTokenService.cs index cc313ca90..2b7a86a5b 100644 --- a/identity-server/src/IdentityServer/Services/IRefreshTokenService.cs +++ b/identity-server/src/IdentityServer/Services/IRefreshTokenService.cs @@ -19,22 +19,27 @@ public interface IRefreshTokenService /// /// The refresh token. /// The client. + /// The cancellation token. /// - Task ValidateRefreshTokenAsync(string token, Client client); + Task ValidateRefreshTokenAsync(string token, Client client, CT ct); /// /// Creates the refresh token. /// + /// The refresh token creation request. + /// The cancellation token. /// /// The refresh token handle /// - Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request); + Task CreateRefreshTokenAsync(RefreshTokenCreationRequest request, CT ct); /// /// Updates the refresh token. /// + /// The refresh token update request. + /// The cancellation token. /// /// The refresh token handle /// - Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request); + Task UpdateRefreshTokenAsync(RefreshTokenUpdateRequest request, CT ct); } diff --git a/identity-server/src/IdentityServer/Validation/Default/IntrospectionRequestValidator.cs b/identity-server/src/IdentityServer/Validation/Default/IntrospectionRequestValidator.cs index ba422ddff..b51c60dad 100644 --- a/identity-server/src/IdentityServer/Validation/Default/IntrospectionRequestValidator.cs +++ b/identity-server/src/IdentityServer/Validation/Default/IntrospectionRequestValidator.cs @@ -128,13 +128,13 @@ internal class IntrospectionRequestValidator : IIntrospectionRequestValidator { _logger.LogDebug("Failed to validate token as access token. Possible incorrect token_type_hint parameter."); } - claims = await GetRefreshTokenClaimsAsync(token, client); + claims = await GetRefreshTokenClaimsAsync(token, client, ct); } } else { // try refresh token - claims = await GetRefreshTokenClaimsAsync(token, client); + claims = await GetRefreshTokenClaimsAsync(token, client, ct); if (claims == null) { // fall back to access token @@ -181,9 +181,9 @@ internal class IntrospectionRequestValidator : IIntrospectionRequestValidator /// /// Attempt to obtain the claims for a token as a refresh token for a client. /// - private async Task> GetRefreshTokenClaimsAsync(string token, Client client) + private async Task> GetRefreshTokenClaimsAsync(string token, Client client, CT ct) { - var refreshValidationResult = await _refreshTokenService.ValidateRefreshTokenAsync(token, client); + var refreshValidationResult = await _refreshTokenService.ValidateRefreshTokenAsync(token, client, ct); if (!refreshValidationResult.IsError) { var iat = ((DateTimeOffset)refreshValidationResult.RefreshToken.CreationTime).ToUnixTimeSeconds(); diff --git a/identity-server/src/IdentityServer/Validation/Default/TokenRequestValidator.cs b/identity-server/src/IdentityServer/Validation/Default/TokenRequestValidator.cs index 5e04e80f8..4d721af09 100644 --- a/identity-server/src/IdentityServer/Validation/Default/TokenRequestValidator.cs +++ b/identity-server/src/IdentityServer/Validation/Default/TokenRequestValidator.cs @@ -698,7 +698,7 @@ internal class TokenRequestValidator : ITokenRequestValidator return Invalid(OidcConstants.TokenErrors.InvalidGrant); } - var result = await _refreshTokenService.ValidateRefreshTokenAsync(refreshTokenHandle, _validatedRequest.Client); + var result = await _refreshTokenService.ValidateRefreshTokenAsync(refreshTokenHandle, _validatedRequest.Client, default); if (result.IsError) { diff --git a/identity-server/test/IdentityServer.IntegrationTests/Hosting/ServerSideSessionTests.cs b/identity-server/test/IdentityServer.IntegrationTests/Hosting/ServerSideSessionTests.cs index e80ef0e0d..290a57c1d 100644 --- a/identity-server/test/IdentityServer.IntegrationTests/Hosting/ServerSideSessionTests.cs +++ b/identity-server/test/IdentityServer.IntegrationTests/Hosting/ServerSideSessionTests.cs @@ -309,7 +309,7 @@ public class ServerSideSessionTests RedirectUri = "https://client/callback" }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); await _sessionMgmt.RemoveSessionsAsync(new RemoveSessionsContext { @@ -320,7 +320,7 @@ public class ServerSideSessionTests SendBackchannelLogoutNotification = false }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); } [Fact] @@ -338,7 +338,7 @@ public class ServerSideSessionTests RedirectUri = "https://client/callback" }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); await _sessionMgmt.RemoveSessionsAsync(new RemoveSessionsContext { @@ -350,7 +350,7 @@ public class ServerSideSessionTests ClientIds = new[] { "foo" } }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); } [Fact] @@ -535,7 +535,7 @@ public class ServerSideSessionTests RedirectUri = "https://client/callback" }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); var session = (await _sessionStore.GetSessionsAsync(new SessionFilter { SubjectId = "alice" })).Single(); session.Expires = System.DateTime.UtcNow.AddMinutes(-1); @@ -543,7 +543,7 @@ public class ServerSideSessionTests await Task.Delay(1000); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); } [Fact] @@ -561,11 +561,11 @@ public class ServerSideSessionTests RedirectUri = "https://client/callback" }); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldNotBeEmpty(); await _pipeline.LogoutAsync(); - ( await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); + (await _grantStore.GetAllAsync(new PersistedGrantFilter { SubjectId = "alice" }, _ct)).ShouldBeEmpty(); } [Fact] diff --git a/identity-server/test/IdentityServer.UnitTests/Services/Default/DefaultRefreshTokenServiceTests.cs b/identity-server/test/IdentityServer.UnitTests/Services/Default/DefaultRefreshTokenServiceTests.cs index 8318cdc80..b8ad52437 100644 --- a/identity-server/test/IdentityServer.UnitTests/Services/Default/DefaultRefreshTokenServiceTests.cs +++ b/identity-server/test/IdentityServer.UnitTests/Services/Default/DefaultRefreshTokenServiceTests.cs @@ -47,7 +47,7 @@ public class DefaultRefreshTokenServiceTests var client = new Client(); var accessToken = new Token(); - var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = accessToken, Client = client }); + var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = accessToken, Client = client }, _ct); (await _store.GetRefreshTokenAsync(handle, _ct)).ShouldNotBeNull(); } @@ -63,7 +63,7 @@ public class DefaultRefreshTokenServiceTests AbsoluteRefreshTokenLifetime = 10 }; - var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }); + var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }, _ct); var refreshToken = (await _store.GetRefreshTokenAsync(handle, _ct)); @@ -83,7 +83,7 @@ public class DefaultRefreshTokenServiceTests AbsoluteRefreshTokenLifetime = 10 }; - var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }); + var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }, _ct); var refreshToken = (await _store.GetRefreshTokenAsync(handle, _ct)); @@ -102,7 +102,7 @@ public class DefaultRefreshTokenServiceTests SlidingRefreshTokenLifetime = 10 }; - var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }); + var handle = await _subject.CreateRefreshTokenAsync(new RefreshTokenCreationRequest { Subject = _user, AccessToken = new Token(), Client = client }, _ct); var refreshToken = (await _store.GetRefreshTokenAsync(handle, _ct)); @@ -127,7 +127,7 @@ public class DefaultRefreshTokenServiceTests var handle = await _store.StoreRefreshTokenAsync(refreshToken, _ct); - (await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client })) + (await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct)) .ShouldNotBeNull() .ShouldNotBe(handle); } @@ -153,7 +153,7 @@ public class DefaultRefreshTokenServiceTests }, _ct); var refreshToken = await _store.GetRefreshTokenAsync(handle, _ct); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); newHandle.ShouldBe(handle); @@ -184,7 +184,7 @@ public class DefaultRefreshTokenServiceTests }, _ct); var refreshToken = await _store.GetRefreshTokenAsync(handle, _ct); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); newHandle.ShouldBe(handle); @@ -215,7 +215,7 @@ public class DefaultRefreshTokenServiceTests }, _ct); var refreshToken = await _store.GetRefreshTokenAsync(handle, _ct); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); newHandle.ShouldBe(handle); @@ -248,7 +248,7 @@ public class DefaultRefreshTokenServiceTests }, _ct); var refreshToken = await _store.GetRefreshTokenAsync(handle, _ct); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); newHandle.ShouldNotBeNull().ShouldNotBe(handle); @@ -281,7 +281,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); var oldToken = await _store.GetRefreshTokenAsync(handle, _ct); var newToken = await _store.GetRefreshTokenAsync(newHandle, _ct); @@ -316,7 +316,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }); + var newHandle = await _subject.UpdateRefreshTokenAsync(new RefreshTokenUpdateRequest { Handle = handle, RefreshToken = refreshToken, Client = client }, _ct); var oldToken = await _store.GetRefreshTokenAsync(handle, _ct); var newToken = await _store.GetRefreshTokenAsync(newHandle, _ct); @@ -337,7 +337,7 @@ public class DefaultRefreshTokenServiceTests RefreshTokenUsage = TokenUsage.OneTimeOnly }; - var result = await _subject.ValidateRefreshTokenAsync("invalid", client); + var result = await _subject.ValidateRefreshTokenAsync("invalid", client, _ct); result.IsError.ShouldBeTrue(); } @@ -364,7 +364,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync(handle, client); + var result = await _subject.ValidateRefreshTokenAsync(handle, client, _ct); result.IsError.ShouldBeTrue(); } @@ -392,7 +392,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync(handle, client); + var result = await _subject.ValidateRefreshTokenAsync(handle, client, _ct); result.IsError.ShouldBeTrue(); } @@ -420,7 +420,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow.AddSeconds(20); _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync(handle, client); + var result = await _subject.ValidateRefreshTokenAsync(handle, client, _ct); result.IsError.ShouldBeTrue(); } @@ -449,7 +449,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync(handle, client); + var result = await _subject.ValidateRefreshTokenAsync(handle, client, _ct); result.IsError.ShouldBeTrue(); } @@ -477,7 +477,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync(handle, client); + var result = await _subject.ValidateRefreshTokenAsync(handle, client, _ct); result.IsError.ShouldBeFalse(); } @@ -506,7 +506,7 @@ public class DefaultRefreshTokenServiceTests var now = DateTime.UtcNow; _timeProvider.SetUtcNow(now); - var result = await _subject.ValidateRefreshTokenAsync("key", client); + var result = await _subject.ValidateRefreshTokenAsync("key", client, _ct); result.IsError.ShouldBeFalse(); }