diff --git a/HopFrame.sln.DotSettings.user b/HopFrame.sln.DotSettings.user index ae702c9..01d3df3 100644 --- a/HopFrame.sln.DotSettings.user +++ b/HopFrame.sln.DotSettings.user @@ -80,6 +80,7 @@ + \ No newline at end of file diff --git a/src/HopFrame.Api/Controller/OpenIdController.cs b/src/HopFrame.Api/Controller/OpenIdController.cs index 50e8822..2892d98 100644 --- a/src/HopFrame.Api/Controller/OpenIdController.cs +++ b/src/HopFrame.Api/Controller/OpenIdController.cs @@ -14,7 +14,7 @@ public class OpenIdController(IOpenIdAccessor accessor, IOptions [HttpGet("redirect")] public async Task RedirectToProvider([FromQuery] string redirectAfter, [FromQuery] int performRedirect = 1) { - var uri = await accessor.ConstructAuthUri(DefaultCallback, redirectAfter); + var uri = await accessor.ConstructAuthUri(redirectAfter); if (performRedirect == 1) { return Redirect(uri); @@ -29,7 +29,7 @@ public class OpenIdController(IOpenIdAccessor accessor, IOptions return BadRequest("Authorization code is missing"); } - var token = await accessor.RequestToken(code, DefaultCallback); + var token = await accessor.RequestToken(code); if (token is null) { return Forbid("Authorization code is not valid"); diff --git a/src/HopFrame.Api/Extensions/ServiceCollectionExtensions.cs b/src/HopFrame.Api/Extensions/ServiceCollectionExtensions.cs index 19436eb..21ae878 100644 --- a/src/HopFrame.Api/Extensions/ServiceCollectionExtensions.cs +++ b/src/HopFrame.Api/Extensions/ServiceCollectionExtensions.cs @@ -3,6 +3,7 @@ using HopFrame.Api.Logic; using HopFrame.Api.Logic.Implementation; using HopFrame.Database; using HopFrame.Security.Authentication; +using HopFrame.Security.Authentication.OpenID; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -25,8 +26,10 @@ public static class ServiceCollectionExtensions { if (!defaultAuthenticationSection.Exists() || configuration.GetValue("HopFrame:Authentication:DefaultAuthentication")) controllers.Add(typeof(AuthController)); - if (configuration.GetValue("HopFrame:Authentication:OpenID:Enabled")) + if (configuration.GetValue("HopFrame:Authentication:OpenID:Enabled")) { + IOpenIdAccessor.DefaultCallback = OpenIdController.DefaultCallback; controllers.Add(typeof(OpenIdController)); + } AddHopFrameNoEndpoints(services, configuration); services.AddMvcCore().UseSpecificControllers(controllers.ToArray()); diff --git a/src/HopFrame.Security/Authentication/OpenID/IOpenIdAccessor.cs b/src/HopFrame.Security/Authentication/OpenID/IOpenIdAccessor.cs index 09dc54c..8045b70 100644 --- a/src/HopFrame.Security/Authentication/OpenID/IOpenIdAccessor.cs +++ b/src/HopFrame.Security/Authentication/OpenID/IOpenIdAccessor.cs @@ -3,9 +3,11 @@ using HopFrame.Security.Authentication.OpenID.Models; namespace HopFrame.Security.Authentication.OpenID; public interface IOpenIdAccessor { + public static string DefaultCallback; + Task LoadConfiguration(); - Task RequestToken(string code, string defaultCallback); - Task ConstructAuthUri(string defaultCallback, string state = null); + Task RequestToken(string code); + Task ConstructAuthUri(string state = null); Task InspectToken(string token); Task RefreshAccessToken(string refreshToken); } \ No newline at end of file diff --git a/src/HopFrame.Security/Authentication/OpenID/Implementation/OpenIdAccessor.cs b/src/HopFrame.Security/Authentication/OpenID/Implementation/OpenIdAccessor.cs index 4ed050c..31fe0c0 100644 --- a/src/HopFrame.Security/Authentication/OpenID/Implementation/OpenIdAccessor.cs +++ b/src/HopFrame.Security/Authentication/OpenID/Implementation/OpenIdAccessor.cs @@ -32,13 +32,13 @@ internal class OpenIdAccessor(IHttpClientFactory clientFactory, IOptions RequestToken(string code, string defaultCallback) { + public async Task RequestToken(string code) { if (options.Value.Cache.Enabled && options.Value.Cache.Auth.Enabled && cache.TryGetValue(AuthCodeCacheKey + code, out object cachedToken)) { return cachedToken as OpenIdToken; } var protocol = accessor.HttpContext!.Request.IsHttps ? "https" : "http"; - var callback = options.Value.Callback ?? Path.Combine($"{protocol}://{accessor.HttpContext!.Request.Host.Value}", defaultCallback); + var callback = options.Value.Callback ?? Path.Combine($"{protocol}://{accessor.HttpContext!.Request.Host.Value}", IOpenIdAccessor.DefaultCallback); var configuration = await LoadConfiguration(); @@ -65,9 +65,9 @@ internal class OpenIdAccessor(IHttpClientFactory clientFactory, IOptions ConstructAuthUri(string defaultCallback, string state = null) { + public async Task ConstructAuthUri(string state = null) { var protocol = accessor.HttpContext!.Request.IsHttps ? "https" : "http"; - var callback = options.Value.Callback ?? Path.Combine($"{protocol}://{accessor.HttpContext!.Request.Host.Value}", defaultCallback); + var callback = options.Value.Callback ?? Path.Combine($"{protocol}://{accessor.HttpContext!.Request.Host.Value}", IOpenIdAccessor.DefaultCallback); var configuration = await LoadConfiguration(); return $"{configuration.AuthorizationEndpoint}?response_type=code&client_id={options.Value.ClientId}&redirect_uri={callback}&scope=openid%20profile%20email%20offline_access&state={state}"; diff --git a/testing/HopFrame.Testing.Api/Controllers/TestController.cs b/testing/HopFrame.Testing.Api/Controllers/TestController.cs index 3a3affe..156dc86 100644 --- a/testing/HopFrame.Testing.Api/Controllers/TestController.cs +++ b/testing/HopFrame.Testing.Api/Controllers/TestController.cs @@ -2,6 +2,7 @@ using HopFrame.Api.Logic; using HopFrame.Api.Models; using HopFrame.Database.Models; using HopFrame.Database.Repositories; +using HopFrame.Security.Authentication.OpenID; using HopFrame.Security.Authorization; using HopFrame.Security.Claims; using HopFrame.Testing.Api.Models; @@ -68,9 +69,8 @@ public class TestController(ITokenContext userContext, DatabaseContext context, } [HttpGet("url")] - public async Task>> GetUrl() { - var protocol = Request.IsHttps ? "https" : "http"; - return Ok($"{protocol}://{Request.Host.Value}/auth/callback"); + public ActionResult GetUrl() { + return Ok(IOpenIdAccessor.DefaultCallback ?? "Not set"); } } \ No newline at end of file