Skip to content

Commit 92012d9

Browse files
committed
Use 'TimeProvider' instead of 'ISystemClock'.
1 parent 6afa40a commit 92012d9

File tree

4 files changed

+16
-11
lines changed

4 files changed

+16
-11
lines changed

Http/src/AppCoreNet.Extensions.Http.Authentication.OAuth.AspNetCore/AppCoreNet.Extensions.Http.Authentication.OAuth.AspNetCore.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
<FrameworkReference Include="Microsoft.AspNetCore.App" />
1414
</ItemGroup>
1515

16+
<ItemGroup>
17+
<PackageReference Include="Microsoft.Bcl.TimeProvider" Condition="'$(TargetFramework)'=='net6.0'" Version="8.0.1" />
18+
</ItemGroup>
19+
1620
<ItemGroup>
1721
<ProjectReference Include="..\AppCoreNet.Extensions.Http.Authentication.OAuth\AppCoreNet.Extensions.Http.Authentication.OAuth.csproj" />
1822
</ItemGroup>

Http/src/AppCoreNet.Extensions.Http.Authentication.OAuth.AspNetCore/OAuthUserTokenService.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public abstract class OAuthUserTokenService<TOptions> : IOAuthUserTokenService
2727
private static readonly ConcurrentDictionary<string, Lazy<Task<OAuthUserToken>>> _sync = new ();
2828
private readonly IOAuthTokenClient _client;
2929
private readonly IOAuthUserTokenStore _store;
30-
private readonly ISystemClock _clock;
30+
private readonly TimeProvider _timeProvider;
3131
private readonly IOptionsMonitor<TOptions> _optionsMonitor;
3232
private readonly ILogger _logger;
3333

@@ -36,25 +36,25 @@ public abstract class OAuthUserTokenService<TOptions> : IOAuthUserTokenService
3636
/// </summary>
3737
/// <param name="client">The <see cref="IOAuthTokenClient"/>.</param>
3838
/// <param name="store">The <see cref="IOAuthUserTokenStore"/>.</param>
39-
/// <param name="clock">The <see cref="ISystemClock"/>.</param>
39+
/// <param name="timeProvider">The <see cref="TimeProvider"/>.</param>
4040
/// <param name="optionsMonitor">The <see cref="IOptionsMonitor{TOptions}"/>. </param>
4141
/// <param name="logger">The <see cref="ILogger"/>.</param>
4242
protected OAuthUserTokenService(
4343
IOAuthTokenClient client,
4444
IOAuthUserTokenStore store,
45-
ISystemClock clock,
45+
TimeProvider timeProvider,
4646
IOptionsMonitor<TOptions> optionsMonitor,
4747
ILogger logger)
4848
{
4949
Ensure.Arg.NotNull(client);
5050
Ensure.Arg.NotNull(store);
51-
Ensure.Arg.NotNull(clock);
51+
Ensure.Arg.NotNull(timeProvider);
5252
Ensure.Arg.NotNull(optionsMonitor);
5353
Ensure.Arg.NotNull(logger);
5454

5555
_client = client;
5656
_store = store;
57-
_clock = clock;
57+
_timeProvider = timeProvider;
5858
_optionsMonitor = optionsMonitor;
5959
_logger = logger;
6060
}
@@ -97,7 +97,7 @@ public async Task<OAuthUserToken> GetAccessTokenAsync(
9797
OAuthUserToken token = await _store.GetTokenAsync(scheme, user, cancellationToken);
9898

9999
DateTimeOffset? refreshAt = token.Expires?.Subtract(options.RefreshBeforeExpiration);
100-
if ((refreshAt.HasValue && refreshAt < _clock.UtcNow)
100+
if ((refreshAt.HasValue && refreshAt < _timeProvider.GetUtcNow())
101101
|| (parameters?.ForceRenewal).GetValueOrDefault())
102102
{
103103
if (!options.AllowTokenRefresh)
@@ -147,7 +147,7 @@ await _client.RequestRefreshTokenAsync(
147147
OAuthUserToken refreshedToken = new (
148148
response.AccessToken,
149149
response.RefreshToken,
150-
response.ExpiresIn > 0 ? DateTimeOffset.UtcNow + TimeSpan.FromSeconds(response.ExpiresIn) : null);
150+
response.ExpiresIn > 0 ? _timeProvider.GetUtcNow() + TimeSpan.FromSeconds(response.ExpiresIn) : null);
151151

152152
_logger.LogDebug(
153153
"Refreshed access token for client scheme {SchemeName}. Expiration: {Expiration}",

Http/src/AppCoreNet.Extensions.Http.Authentication.OAuth.OpenIdConnect/DependencyInjection/OpenIdConnectHttpClientAuthenticationBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public static IHttpClientAuthenticationBuilder AddOpenIdConnect(
7878

7979
services.TryAdd(new[]
8080
{
81+
ServiceDescriptor.Singleton(TimeProvider.System),
8182
ServiceDescriptor.Scoped<OpenIdConnectUserTokenService, OpenIdConnectUserTokenService>(),
8283
ServiceDescriptor.Scoped<OpenIdConnectUserTokenStore, OpenIdConnectUserTokenStore>(),
8384
});

Http/src/AppCoreNet.Extensions.Http.Authentication.OAuth.OpenIdConnect/OpenIdConnectUserTokenService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Licensed under the MIT license.
22
// Copyright (c) The AppCore .NET project.
33

4+
using System;
45
using AppCoreNet.Extensions.Http.Authentication.OAuth.AspNetCore;
5-
using Microsoft.AspNetCore.Authentication;
66
using Microsoft.Extensions.Logging;
77
using Microsoft.Extensions.Options;
88

@@ -18,16 +18,16 @@ public class OpenIdConnectUserTokenService : OAuthUserTokenService<OpenIdConnect
1818
/// </summary>
1919
/// <param name="client">The <see cref="IOAuthTokenClient"/>.</param>
2020
/// <param name="store">The <see cref="OpenIdConnectUserTokenStore"/>.</param>
21-
/// <param name="clock">The <see cref="ISystemClock"/>.</param>
21+
/// <param name="timeProvider">The <see cref="TimeProvider"/>.</param>
2222
/// <param name="optionsMonitor">The <see cref="IOptionsMonitor{TOptions}"/>.</param>
2323
/// <param name="logger">The <see cref="ILogger"/>.</param>
2424
public OpenIdConnectUserTokenService(
2525
IOAuthTokenClient client,
2626
OpenIdConnectUserTokenStore store,
27-
ISystemClock clock,
27+
TimeProvider timeProvider,
2828
IOptionsMonitor<OpenIdConnectUserOptions> optionsMonitor,
2929
ILogger<OpenIdConnectUserTokenService> logger)
30-
: base(client, store, clock, optionsMonitor, logger)
30+
: base(client, store, timeProvider, optionsMonitor, logger)
3131
{
3232
}
3333

0 commit comments

Comments
 (0)