From 293303c989c365fddda3a168a62c32c0bd0f4881 Mon Sep 17 00:00:00 2001 From: Warren Chen Date: Thu, 26 Mar 2026 06:25:17 +0900 Subject: [PATCH] Align OpenIddict endpoints with configured path base --- src/MemberCenter.Api/Program.cs | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/MemberCenter.Api/Program.cs b/src/MemberCenter.Api/Program.cs index 71be6b0..b20a96b 100644 --- a/src/MemberCenter.Api/Program.cs +++ b/src/MemberCenter.Api/Program.cs @@ -13,6 +13,7 @@ using OpenIddict.Validation.AspNetCore; EnvLoader.LoadDotEnvIfDevelopment(); var builder = WebApplication.CreateBuilder(args); +var pathBase = NormalizePathBase(builder.Configuration["PathBase"]); builder.Services.AddDbContext(options => { @@ -51,9 +52,12 @@ builder.Services.AddOpenIddict() }) .AddServer(options => { - options.SetAuthorizationEndpointUris("/oauth/authorize"); - options.SetTokenEndpointUris("/oauth/token", "/auth/login", "/auth/refresh"); - options.SetLogoutEndpointUris("/auth/logout"); + options.SetAuthorizationEndpointUris(WithPathBase(pathBase, "/oauth/authorize")); + options.SetTokenEndpointUris( + WithPathBase(pathBase, "/oauth/token"), + WithPathBase(pathBase, "/auth/login"), + WithPathBase(pathBase, "/auth/refresh")); + options.SetLogoutEndpointUris(WithPathBase(pathBase, "/auth/logout")); var issuer = builder.Configuration["Auth:Issuer"]; if (!string.IsNullOrWhiteSpace(issuer)) { @@ -128,13 +132,11 @@ builder.Services.AddHttpClient(); builder.Services.AddScoped(); var app = builder.Build(); -var pathBase = builder.Configuration["PathBase"]; app.UseForwardedHeaders(); if (!string.IsNullOrWhiteSpace(pathBase)) { - var normalizedPathBase = pathBase.StartsWith('/') ? pathBase : $"/{pathBase}"; - app.UsePathBase(normalizedPathBase); + app.UsePathBase(pathBase); } app.UseRouting(); @@ -144,3 +146,22 @@ app.UseAuthorization(); app.MapControllers(); app.Run(); + +static string? NormalizePathBase(string? pathBase) +{ + if (string.IsNullOrWhiteSpace(pathBase)) + { + return null; + } + + var normalized = pathBase.StartsWith('/') ? pathBase : $"/{pathBase}"; + return normalized.Length > 1 ? normalized.TrimEnd('/') : normalized; +} + +static string WithPathBase(string? pathBase, string relativePath) +{ + var normalizedRelativePath = relativePath.StartsWith('/') ? relativePath : $"/{relativePath}"; + return string.IsNullOrWhiteSpace(pathBase) + ? normalizedRelativePath + : $"{pathBase}{normalizedRelativePath}"; +}