From 081935db0bb2b3a9fdef223f02c6a930104c5446 Mon Sep 17 00:00:00 2001 From: Joe DeCock Date: Mon, 20 Nov 2023 11:28:56 -0600 Subject: [PATCH] Rework to support both .NET 6 and 8 --- Directory.Build.targets | 35 +++++++++++++++++++ global.json | 2 +- samples/Web/Controllers/HomeController.cs | 10 +++--- samples/Web/Startup.cs | 12 +++---- ...ClientCredentialsClientConfigureOptions.cs | 2 +- ...AccessTokenManagement.OpenIdConnect.csproj | 5 +-- .../UserAccessTokenManagementService.cs | 15 +++++++- .../Duende.AccessTokenManagement.csproj | 15 ++++---- test/Tests/Framework/TestLoggerProvider.cs | 2 ++ test/Tests/Tests.csproj | 10 +++--- 10 files changed, 79 insertions(+), 29 deletions(-) create mode 100644 Directory.Build.targets diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000..fdbf5aa --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,35 @@ + + + 8.0.0 + 8.0.0 + 7.0.3 + 7.0.0-preview.2 + + + + 6.0.0 + 6.0.0 + 6.15.0 + 6.3.6 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/global.json b/global.json index b7e9313..72d38cd 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "6.0.100", + "version": "8.0.100", "rollForward": "latestMajor", "allowPrerelease": false } diff --git a/samples/Web/Controllers/HomeController.cs b/samples/Web/Controllers/HomeController.cs index 7771e28..44d822d 100755 --- a/samples/Web/Controllers/HomeController.cs +++ b/samples/Web/Controllers/HomeController.cs @@ -33,7 +33,7 @@ public async Task CallApiAsUserManual() var client = _httpClientFactory.CreateClient(); client.SetToken(token.AccessTokenType!, token.AccessToken!); - var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/test"); + var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/dpop/test"); ViewBag.Json = PrettyPrint(response); return View("CallApi"); @@ -45,7 +45,7 @@ public async Task CallApiAsUserExtensionMethod() var client = _httpClientFactory.CreateClient(); client.SetToken(token.AccessTokenType!, token.AccessToken!); - var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/test"); + var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/dpop/test"); ViewBag.Json = PrettyPrint(response); return View("CallApi"); @@ -76,7 +76,7 @@ public async Task CallApiAsUserResourceIndicator() var client = _httpClientFactory.CreateClient(); client.SetToken(token.AccessTokenType!, token.AccessToken!); - var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/test"); + var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/dpop/test"); ViewBag.Json = PrettyPrint(response); return View("CallApi"); @@ -90,7 +90,7 @@ public async Task CallApiAsClientExtensionMethod() var client = _httpClientFactory.CreateClient(); client.SetToken(token.AccessTokenType!, token.AccessToken!); - var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/test"); + var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/dpop/test"); ViewBag.Json = PrettyPrint(response); return View("CallApi"); @@ -103,7 +103,7 @@ public async Task CallApiAsClientResourceIndicator() var client = _httpClientFactory.CreateClient(); client.SetToken(token.AccessTokenType!, token.AccessToken!); - var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/test"); + var response = await client.GetStringAsync("https://demo.duendesoftware.com/api/dpop/test"); ViewBag.Json = PrettyPrint(response); return View("CallApi"); diff --git a/samples/Web/Startup.cs b/samples/Web/Startup.cs index 3573017..b54643a 100755 --- a/samples/Web/Startup.cs +++ b/samples/Web/Startup.cs @@ -76,30 +76,30 @@ internal static WebApplication ConfigureServices(this WebApplicationBuilder buil { // if you uncomment this line, then be sure to change the URL for the "user_client" // to include "dpop/" at the end, since that's the DPoP enabled API path - //options.DPoPJsonWebKey = jwk; + options.DPoPJsonWebKey = jwk; }); // registers HTTP client that uses the managed user access token builder.Services.AddUserAccessTokenHttpClient("user_client", configureClient: client => { - client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/"); - //client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/dpop/"); + //client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/"); + client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/dpop/"); }); // registers HTTP client that uses the managed client access token builder.Services.AddClientAccessTokenHttpClient("client", - configureClient: client => { client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/"); }); + configureClient: client => { client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/dpop/"); }); // registers a typed HTTP client with token management support builder.Services.AddHttpClient(client => { - client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/"); + client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/dpop/"); }) .AddUserAccessTokenHandler(); builder.Services.AddHttpClient(client => { - client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/"); + client.BaseAddress = new Uri("https://demo.duendesoftware.com/api/dpop/"); }) .AddClientAccessTokenHandler(); diff --git a/samples/WorkerDI/ClientCredentialsClientConfigureOptions.cs b/samples/WorkerDI/ClientCredentialsClientConfigureOptions.cs index 7246460..8d98750 100644 --- a/samples/WorkerDI/ClientCredentialsClientConfigureOptions.cs +++ b/samples/WorkerDI/ClientCredentialsClientConfigureOptions.cs @@ -19,7 +19,7 @@ public void Configure(ClientCredentialsClient options) throw new System.NotImplementedException(); } - public void Configure(string name, ClientCredentialsClient options) + public void Configure(string? name, ClientCredentialsClient options) { if (name == "demo.jwt") { diff --git a/src/Duende.AccessTokenManagement.OpenIdConnect/Duende.AccessTokenManagement.OpenIdConnect.csproj b/src/Duende.AccessTokenManagement.OpenIdConnect/Duende.AccessTokenManagement.OpenIdConnect.csproj index 5ca2519..8645a1d 100644 --- a/src/Duende.AccessTokenManagement.OpenIdConnect/Duende.AccessTokenManagement.OpenIdConnect.csproj +++ b/src/Duende.AccessTokenManagement.OpenIdConnect/Duende.AccessTokenManagement.OpenIdConnect.csproj @@ -1,7 +1,7 @@ - net8.0 + net6.0;net8.0 enable true @@ -11,7 +11,8 @@ - + + diff --git a/src/Duende.AccessTokenManagement.OpenIdConnect/UserAccessTokenManagementService.cs b/src/Duende.AccessTokenManagement.OpenIdConnect/UserAccessTokenManagementService.cs index 55eb0b5..a54465e 100755 --- a/src/Duende.AccessTokenManagement.OpenIdConnect/UserAccessTokenManagementService.cs +++ b/src/Duende.AccessTokenManagement.OpenIdConnect/UserAccessTokenManagementService.cs @@ -19,7 +19,11 @@ public class UserAccessAccessTokenManagementService : IUserTokenManagementServic { private readonly IUserTokenRequestSynchronization _sync; private readonly IUserTokenStore _userAccessTokenStore; +#if NET8_0_OR_GREATER private readonly TimeProvider _clock; +#else + private readonly ISystemClock _clock; +#endif private readonly UserTokenManagementOptions _options; private readonly IUserTokenEndpointService _tokenEndpointService; private readonly ILogger _logger; @@ -36,7 +40,11 @@ public class UserAccessAccessTokenManagementService : IUserTokenManagementServic public UserAccessAccessTokenManagementService( IUserTokenRequestSynchronization sync, IUserTokenStore userAccessTokenStore, +#if NET8_0_OR_GREATER TimeProvider clock, +#else + ISystemClock clock, +#endif IOptions options, IUserTokenEndpointService tokenEndpointService, ILogger logger) @@ -92,7 +100,12 @@ public async Task GetAccessTokenAsync( } var dtRefresh = userToken.Expiration.Subtract(_options.RefreshBeforeExpiration); - if (dtRefresh < _clock.GetUtcNow() || parameters.ForceRenewal || needsRenewal) +#if NET8_0_OR_GREATER + var utcNow = _clock.GetUtcNow(); +#else + var utcNow = _clock.UtcNow; +#endif + if (dtRefresh < utcNow || parameters.ForceRenewal || needsRenewal) { _logger.LogDebug("Token for user {user} needs refreshing.", userName); diff --git a/src/Duende.AccessTokenManagement/Duende.AccessTokenManagement.csproj b/src/Duende.AccessTokenManagement/Duende.AccessTokenManagement.csproj index 838bac7..4620cec 100644 --- a/src/Duende.AccessTokenManagement/Duende.AccessTokenManagement.csproj +++ b/src/Duende.AccessTokenManagement/Duende.AccessTokenManagement.csproj @@ -1,7 +1,7 @@  - net8.0 + net6.0;net8.0 enable true @@ -16,12 +16,11 @@ - - - - - - + + + + + + - diff --git a/test/Tests/Framework/TestLoggerProvider.cs b/test/Tests/Framework/TestLoggerProvider.cs index d0837dc..f541ab9 100644 --- a/test/Tests/Framework/TestLoggerProvider.cs +++ b/test/Tests/Framework/TestLoggerProvider.cs @@ -23,7 +23,9 @@ public void Dispose() } public IDisposable BeginScope(TState state) +#if NET8_0_OR_GREATER where TState : notnull +#endif { return this; } diff --git a/test/Tests/Tests.csproj b/test/Tests/Tests.csproj index f7264c5..573ea07 100644 --- a/test/Tests/Tests.csproj +++ b/test/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net6.0;net8.0 enable enable @@ -11,11 +11,11 @@ - - - + + + - +