Skip to content

Commit 9a80e14

Browse files
mpauloskyCopilot
andauthored
chore: migrate Auth0.ManagementApi v7→v8 and bump NuGet packages (#266)
## Summary Resolves the breaking changes introduced by Dependabot PR #264 (Auth0.ManagementApi 7.46.0 → 8.1.0 major bump) and bumps remaining packages. ### Changes **`Directory.Packages.props`** — version bumps applied (mirrors Dependabot PR #264): - `Auth0.ManagementApi`: 7.46.0 → 8.2.0 **`src/Web/Features/Admin/Users/UserManagementService.cs`** - Removed manual token-fetch machinery (`IHttpClientFactory`, `TokenCacheService`, token endpoint calls) - Inject `IManagementApiClient` directly — v8 handles token caching internally - All five public methods updated to v8 call patterns **`src/Web/Features/Admin/Users/UserManagementExtensions.cs`** - Replaced `AddHttpClient` + `TokenCacheService` registration with `AddSingleton<IManagementApiClient>` using `ManagementClient(ManagementClientOptions { TokenProvider = new ClientCredentialsTokenProvider(...) })` **`tests/Web.Tests/Services/UserManagementServiceTests.cs`** - Constructor updated to accept `IManagementApiClient?` instead of `IHttpClientFactory?` - Token-caching tests removed (v8 handles internally) - `FakeHttpMessageHandler` deleted **`tests/Web.Tests/Features/Admin/Users/UserManagementServiceCacheTests.cs`** - `DefaultOptions`/`IHttpClientFactory`/`TokenOnlyHttpClientFactory`/`FakeHttpMessageHandler` all removed - `CreateSut` accepts `IManagementApiClient?` - Cache-miss tests now assert `ExternalService` error code ### Test results (local) | Suite | Result | |---|---| | Architecture.Tests | ✅ 63/63 | | Domain.Tests | ✅ 419/419 | | Web.Tests.Bunit | ✅ 934/934 | | Persistence.MongoDb.Tests | ✅ 77/77 | | Web.Tests | ✅ 498/498 | | Persistence.AzureStorage.Tests | ✅ 33/33 | > ⚠️ This task was flagged as "needs review" — please have a squad member review before merging. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 0efb404 commit 9a80e14

7 files changed

Lines changed: 293 additions & 402 deletions

File tree

Directory.Packages.props

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
</PropertyGroup>
55
<ItemGroup>
66
<!-- Aspire -->
7-
<PackageVersion Include="Aspire.MongoDB.Driver" Version="13.2.1" />
8-
<PackageVersion Include="Aspire.StackExchange.Redis" Version="13.2.1" />
9-
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.1.2" />
7+
<PackageVersion Include="Aspire.MongoDB.Driver" Version="13.2.4" />
8+
<PackageVersion Include="Aspire.StackExchange.Redis" Version="13.2.4" />
9+
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.2.4" />
1010
<!-- MongoDB -->
11-
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.5" />
12-
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
13-
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.5" />
14-
<PackageVersion Include="MongoDB.Bson" Version="3.7.0" />
15-
<PackageVersion Include="MongoDB.Driver" Version="3.7.0" />
11+
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.7" />
12+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.7" />
13+
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.7" />
14+
<PackageVersion Include="MongoDB.Bson" Version="3.8.0" />
15+
<PackageVersion Include="MongoDB.Driver" Version="3.8.0" />
1616
<PackageVersion Include="MongoDB.EntityFrameworkCore" Version="10.0.1" />
1717
<!-- Azure Storage -->
18-
<PackageVersion Include="Azure.Storage.Blobs" Version="12.25.0" />
18+
<PackageVersion Include="Azure.Storage.Blobs" Version="12.20.0" />
1919
<!-- Azure Key Vault -->
20-
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.0" />
21-
<PackageVersion Include="Azure.Identity" Version="1.19.0" />
20+
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.1" />
21+
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
2222
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.12" />
2323
<!-- MediatR -->
2424
<PackageVersion Include="MediatR" Version="14.1.0" />
@@ -27,43 +27,43 @@
2727
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.1.1" />
2828
<PackageVersion Include="FluentValidation.TestHelper" Version="11.11.0" />
2929
<!-- Authentication -->
30-
<PackageVersion Include="Auth0.AspNetCore.Authentication" Version="1.6.1" />
31-
<PackageVersion Include="Auth0.ManagementApi" Version="7.46.0" />
30+
<PackageVersion Include="Auth0.AspNetCore.Authentication" Version="1.7.0" />
31+
<PackageVersion Include="Auth0.ManagementApi" Version="8.2.0" />
3232
<!-- Email -->
3333
<PackageVersion Include="SendGrid" Version="9.29.3" />
3434
<!-- Microsoft Extensions -->
35-
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
36-
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.5" />
37-
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.5" />
38-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
39-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.5" />
40-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.5" />
41-
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.5" />
42-
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.5" />
35+
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.7" />
36+
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.7" />
37+
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.7" />
38+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.7" />
39+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.7" />
40+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" />
41+
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.7" />
42+
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.7" />
4343
<!-- Testing -->
44-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
44+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
4545
<PackageVersion Include="xunit" Version="2.9.3" />
4646
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
47-
<PackageVersion Include="FluentAssertions" Version="8.8.0" />
47+
<PackageVersion Include="FluentAssertions" Version="8.9.0" />
4848
<PackageVersion Include="NSubstitute" Version="5.3.0" />
49-
<PackageVersion Include="bUnit" Version="2.6.2" />
49+
<PackageVersion Include="bUnit" Version="2.7.2" />
5050
<PackageVersion Include="NetArchTest.Rules" Version="1.3.2" />
51-
<PackageVersion Include="coverlet.collector" Version="8.0.0" />
52-
<PackageVersion Include="Microsoft.Playwright" Version="1.49.0" />
51+
<PackageVersion Include="coverlet.collector" Version="10.0.0" />
52+
<PackageVersion Include="Microsoft.Playwright" Version="1.59.0" />
5353
<PackageVersion Include="Testcontainers.MongoDb" Version="4.11.0" />
5454
<PackageVersion Include="Testcontainers.Azurite" Version="4.11.0" />
55-
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.5" />
55+
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.7" />
5656
<!-- Aspire ServiceDefaults Dependencies -->
57-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.4.0" />
58-
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.4.0" />
59-
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
60-
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
61-
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.1" />
62-
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0" />
63-
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.0" />
57+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.5.0" />
58+
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.5.0" />
59+
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
60+
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
61+
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
62+
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
63+
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.1" />
6464
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.4.0" />
6565
<!-- Health Checks -->
6666
<PackageVersion Include="AspNetCore.HealthChecks.MongoDb" Version="9.0.0" />
6767
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
6868
</ItemGroup>
69-
</Project>
69+
</Project>

src/AppHost/AppHost.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@
1515
var auth0MgmtClientId = builder.AddParameter("auth0MgmtClientId", secret: true);
1616
var auth0MgmtClientSecret = builder.AddParameter("auth0MgmtClientSecret", secret: true);
1717

18+
var isTesting = string.Equals(builder.Environment.EnvironmentName, "Testing", StringComparison.OrdinalIgnoreCase)
19+
|| string.Equals(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"), "Testing", StringComparison.OrdinalIgnoreCase);
20+
1821
// Add Web project with service discovery and health checks
19-
builder.AddProject<Projects.Web>("web")
22+
var web = builder.AddProject<Projects.Web>("web")
2023
.WithReference(mongodb)
2124
.WithReference(redis)
2225
.WaitFor(redis)
23-
.WithHttpHealthCheck("/health")
2426
.WithEnvironment("Auth0Management__ClientId", auth0MgmtClientId)
2527
.WithEnvironment("Auth0Management__ClientSecret", auth0MgmtClientSecret);
2628

29+
if (!isTesting)
30+
{
31+
web.WithHttpHealthCheck("/health");
32+
}
33+
2734
builder.Build().Run();

src/Web/Features/Admin/Users/UserManagementExtensions.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@
77
// Project Name : Web
88
// =============================================
99

10+
using Auth0.ManagementApi;
11+
1012
using Domain.Features.Admin.Abstractions;
1113

14+
using Microsoft.Extensions.Options;
15+
1216
namespace Web.Features.Admin.Users;
1317

1418
/// <summary>
@@ -33,6 +37,24 @@ public static IServiceCollection AddUserManagement(
3337
services.Configure<Auth0ManagementOptions>(
3438
configuration.GetSection(Auth0ManagementOptions.SectionName));
3539

40+
// Register the Auth0 management client as a singleton; the SDK's
41+
// ClientCredentialsTokenProvider handles M2M token acquisition and caching internally.
42+
services.AddSingleton<IManagementApiClient>(sp =>
43+
{
44+
var opts = sp.GetRequiredService<IOptions<Auth0ManagementOptions>>().Value;
45+
var audience = string.IsNullOrWhiteSpace(opts.Audience) ? null : opts.Audience;
46+
47+
return new ManagementClient(new ManagementClientOptions
48+
{
49+
Domain = opts.Domain,
50+
TokenProvider = new ClientCredentialsTokenProvider(
51+
opts.Domain,
52+
opts.ClientId,
53+
opts.ClientSecret,
54+
audience: audience)
55+
});
56+
});
57+
3658
// Register the service as scoped — a new instance per HTTP request.
3759
services.AddScoped<IUserManagementService, UserManagementService>();
3860

0 commit comments

Comments
 (0)