Compare commits

..
8 Commits
Author SHA1 Message Date
khwezi 92c60e6616 Merge pull request 'Refactored AddLiteCharmsWebSecurity to be OS aware when it handles data protection keys' (#121) from dataprotection into master
Reviewed-on: #121
2026-06-13 23:41:30 +02:00
Khwezi Mngoma 9099610185 Refactored AddLiteCharmsWebSecurity to be OS aware when it handles data protection keys
continuous-integration/drone/pr Build is passing
2026-06-13 23:41:02 +02:00
khwezi 21788c66a3 Merge pull request 'Added data protection keys to web iodc middleware regirtration method' (#120) from dataprotection into master
Reviewed-on: #120
2026-06-13 23:34:35 +02:00
Khwezi Mngoma dfaa62ea75 Added data protection keys to web iodc middleware regirtration method
continuous-integration/drone/pr Build is passing
2026-06-13 23:34:07 +02:00
khwezi 54ef7a6e5f Merge pull request 'Fixed cookie and header collision issue on signout' (#119) from logout-fix into master
Reviewed-on: #119
2026-06-13 23:07:22 +02:00
Khwezi Mngoma 0ec7ef4861 Fixed cookie and header collision issue on signout
continuous-integration/drone/pr Build is passing
2026-06-13 23:06:53 +02:00
khwezi 6594e0aecd Merge pull request 'Fixed the redirect URI on logout so its passed by the caller' (#118) from logout-fix into master
Reviewed-on: #118
2026-06-13 22:51:48 +02:00
Khwezi Mngoma 088e64f28f Fixed the redirect URI on logout so its passed by the caller
continuous-integration/drone/pr Build is passing
2026-06-13 22:51:07 +02:00
2 changed files with 29 additions and 6 deletions
+28 -6
View File
@@ -2,6 +2,8 @@
using LiteCharms.Features.Api;
using LiteCharms.Features.Api.Configuration;
using LiteCharms.Features.Api.Sdk;
using Microsoft.AspNetCore.Hosting;
using System.Runtime.InteropServices;
namespace LiteCharms.Features.Extensions;
@@ -18,7 +20,7 @@ public static class Api
return services;
}
public static IServiceCollection AddSecurityApiSdk(this IServiceCollection services, IConfiguration configuration)
{
var configSection = configuration.GetSection(nameof(LiteCharmsClientSettings));
@@ -51,8 +53,21 @@ public static class Api
return services;
}
public static IServiceCollection AddLiteCharmsWebSecurity(this IServiceCollection services, IConfiguration configuration)
public static IServiceCollection AddLiteCharmsWebSecurity(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment)
{
string keysFolderPath;
if (OperatingSystem.IsLinux())
keysFolderPath = "/app/shared-keys";
else
keysFolderPath = Path.Combine(environment.ContentRootPath, "obj", "DeveloperDataProtectionKeys");
if (!Directory.Exists(keysFolderPath)) Directory.CreateDirectory(keysFolderPath);
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(keysFolderPath))
.SetApplicationName("MidrandBookshop");
var configSection = configuration.GetSection(nameof(LiteCharmsSettings));
var authOptions = new LiteCharmsSettings();
@@ -77,6 +92,8 @@ public static class Api
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.ForwardSignOut = CookieAuthenticationDefaults.AuthenticationScheme;
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
@@ -143,17 +160,22 @@ public static class Api
});
});
app.MapGet("/logout", async (HttpContext context) =>
app.MapGet("/logout", async (HttpContext context, string? redirectUri = null) =>
{
var idToken = await context.GetTokenAsync("id_token");
var authProperties = new AuthenticationProperties { RedirectUri = "/", };
if (string.IsNullOrWhiteSpace(redirectUri))
{
var host = context.Request.Host.ToUriComponent();
redirectUri = $"https://{host}/";
}
if (!string.IsNullOrEmpty(idToken))
var authProperties = new AuthenticationProperties { RedirectUri = redirectUri, };
if (!string.IsNullOrEmpty(idToken))
authProperties.Parameters.Add("id_token_hint", idToken);
await context.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, authProperties);
await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
});
return app;
@@ -194,6 +194,7 @@
<!-- Shared Usings -->
<ItemGroup>
<Using Include="Microsoft.AspNetCore.DataProtection" />
<Using Include="Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage" />
<Using Include="System.Text.Json.Serialization" />
<Using Include="System.Reflection" />