diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Aspire.ApiService.csproj b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Aspire.ApiService.csproj index 41ca59c9..122315fd 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Aspire.ApiService.csproj +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Aspire.ApiService.csproj @@ -8,7 +8,7 @@ - + diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Properties/launchSettings.json b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Properties/launchSettings.json index edf6ad23..bd2b6ca8 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Properties/launchSettings.json +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ApiService/Properties/launchSettings.json @@ -4,7 +4,7 @@ "http": { "commandName": "Project", "dotnetRunMessages": true, - "launchBrowser": true, + "launchBrowser": false, "launchUrl": "weatherforecast", "applicationUrl": "https://localhost:5325", "environmentVariables": { diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Aspire.AppHost.csproj b/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Aspire.AppHost.csproj index e8fd4ccb..e329b371 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Aspire.AppHost.csproj +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Aspire.AppHost.csproj @@ -1,6 +1,6 @@ - + Exe @@ -15,9 +15,4 @@ - - - - - diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Program.cs b/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Program.cs index 51d99edf..3fca5d7a 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Program.cs +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.AppHost/Program.cs @@ -1,10 +1,16 @@ var builder = DistributedApplication.CreateBuilder(args); -var apiService = builder.AddProject("apiservice"); +var identityServer = builder.AddProject("identityserver") + .WithExternalHttpEndpoints(); -builder.AddProject("webfrontend") - .WithReference(apiService); +var apiService = builder.AddProject("apiservice") + .WithReference(identityServer); -builder.AddProject("identityserver"); +var webFrontend = builder.AddProject("webfrontend") + .WithReference(apiService) + .WithReference(identityServer) + .WithExternalHttpEndpoints(); + +identityServer.WithReference(webFrontend); builder.Build().Run(); diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj index ca559228..e0f3d2c6 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj @@ -11,14 +11,14 @@ - - - - - + + + + + - - + + diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Aspire.Web.csproj b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Aspire.Web.csproj index 2640a905..9e5040b5 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Aspire.Web.csproj +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Aspire.Web.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Program.cs b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Program.cs index 4a4bdcfd..8eba70c9 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Program.cs +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Program.cs @@ -1,4 +1,5 @@ using Aspire.Web; +using Duende.AccessTokenManagement.OpenIdConnect; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; @@ -15,7 +16,7 @@ .AddCookie() .AddOpenIdConnect(opt => { - opt.Authority = "https://localhost:5001"; + opt.Authority = builder.Configuration["services:identityserver:https:0"]; opt.ClientId = "web"; opt.ClientSecret = "49C1A7E1-0C79-4A89-A3D6-A37998FB86B0"; diff --git a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Properties/launchSettings.json b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Properties/launchSettings.json index 6b3a39b0..015ababb 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Properties/launchSettings.json +++ b/IdentityServer/v7/Diagnostics/Aspire/Aspire.Web/Properties/launchSettings.json @@ -4,7 +4,7 @@ "http": { "commandName": "Project", "dotnetRunMessages": true, - "launchBrowser": true, + "launchBrowser": false, "applicationUrl": "https://localhost:5014", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Config.cs b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Config.cs index 921f7c8d..db12cff7 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Config.cs +++ b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Config.cs @@ -15,19 +15,21 @@ public static class Config new ApiScope("weather"), ]; - public static IEnumerable Clients => + public static IEnumerable GetClients(string? webUrl = "https://localhost:5014") + { + return [ // interactive client using code flow + pkce new Client { ClientId = "web", ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) }, - + AllowedGrantTypes = GrantTypes.Code, - RedirectUris = { "https://localhost:5014/signin-oidc" }, - FrontChannelLogoutUri = "https://localhost:5014/signout-oidc", - PostLogoutRedirectUris = { "https://localhost:5014/signout-callback-oidc" }, + RedirectUris = { $"{webUrl}/signin-oidc" }, + FrontChannelLogoutUri = $"{webUrl}/signout-oidc", + PostLogoutRedirectUris = { $"{webUrl}/signout-callback-oidc" }, AllowOfflineAccess = true, AllowedScopes = { "openid", "profile", "weather" }, @@ -38,4 +40,6 @@ public static class Config AccessTokenLifetime = 70 }, ]; + } + } diff --git a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/HostingExtensions.cs b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/HostingExtensions.cs index 4954f0fd..c98cc272 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/HostingExtensions.cs +++ b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/HostingExtensions.cs @@ -27,7 +27,9 @@ public static WebApplication ConfigureServices(this WebApplicationBuilder builde // in-memory, code config isBuilder.AddInMemoryIdentityResources(Config.IdentityResources); isBuilder.AddInMemoryApiScopes(Config.ApiScopes); - isBuilder.AddInMemoryClients(Config.Clients); + + var webUrl = builder.Configuration["services:webfrontend:https:0"]; + isBuilder.AddInMemoryClients(Config.GetClients(webUrl)); // if you want to use server-side sessions: https://blog.duendesoftware.com/posts/20220406_session_management/ @@ -67,6 +69,8 @@ public static WebApplication ConfigureServices(this WebApplicationBuilder builde public static WebApplication ConfigurePipeline(this WebApplication app) { + app.MapDefaultEndpoints(); + if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/IdentityServer.csproj b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/IdentityServer.csproj index a1c6b113..c040ff8c 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/IdentityServer.csproj +++ b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/IdentityServer.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Pages/Diagnostics/ViewModel.cs b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Pages/Diagnostics/ViewModel.cs index 5a57e6b1..34d3e695 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Pages/Diagnostics/ViewModel.cs +++ b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Pages/Diagnostics/ViewModel.cs @@ -1,6 +1,7 @@ // Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. +using System.Buffers.Text; using Duende.IdentityModel; using Microsoft.AspNetCore.Authentication; using System.Text; @@ -18,7 +19,7 @@ public ViewModel(AuthenticateResult result) { if (encoded != null) { - var bytes = Base64Url.Decode(encoded); + var bytes = Base64Url.DecodeFromChars(encoded); var value = Encoding.UTF8.GetString(bytes); Clients = JsonSerializer.Deserialize(value) ?? Enumerable.Empty(); return; diff --git a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Properties/launchSettings.json b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Properties/launchSettings.json index f40feb3d..91980587 100644 --- a/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Properties/launchSettings.json +++ b/IdentityServer/v7/Diagnostics/Aspire/IdentityServer/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "SelfHost": { "commandName": "Project", - "launchBrowser": true, + "launchBrowser": false, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" },