feat: add OIDC back-channel logout (#1734)

Co-authored-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
This commit is contained in:
Alec Rubin
2026-09-23 21:34:38 +02:00
committed by GitHub
co-authored by Alessandro Segala Elias Schneider
parent 23c4825abd
commit 2075de3234
33 changed files with 1493 additions and 96 deletions
+1
View File
@@ -54,6 +54,7 @@ export type OidcDiscoveryConfiguration = {
export type OidcClient = OidcClientMetaData & {
callbackURLs: string[];
logoutCallbackURLs: string[];
backchannelLogoutURL: string;
isPublic: boolean;
pkceEnabled: boolean;
requiresReauthentication: boolean;
@@ -57,6 +57,7 @@
description: existingClient?.description || '',
callbackURLs: existingClient?.callbackURLs || [],
logoutCallbackURLs: existingClient?.logoutCallbackURLs || [],
backchannelLogoutURL: existingClient?.backchannelLogoutURL || '',
isPublic: existingClient?.isPublic || false,
pkceEnabled: existingClient?.pkceEnabled || false,
requiresReauthentication: existingClient?.requiresReauthentication || false,
@@ -84,6 +85,7 @@
description: z.string().max(150),
callbackURLs: z.array(callbackUrlSchema).default([]),
logoutCallbackURLs: z.array(callbackUrlSchema).default([]),
backchannelLogoutURL: z.url().or(z.literal('')),
isPublic: z.boolean(),
pkceEnabled: z.boolean(),
requiresReauthentication: z.boolean(),
@@ -346,15 +348,25 @@
description={m.requires_pushed_authorization_requests_description()}
bind:checked={$inputs.requiresPushedAuthorizationRequests.value}
/>
{#if mode == 'create'}
<div class="grid grid-cols-1 gap-x-3 gap-y-7 md:grid-cols-2">
<FormInput
label={m.client_id()}
placeholder={m.generated()}
class="w-full md:w-1/2"
description={m.custom_client_id_description()}
bind:input={$inputs.id}
label={m.backchannel_logout_url()}
description={m.backchannel_logout_url_description()}
class="w-full"
type="url"
bind:input={$inputs.backchannelLogoutURL}
disabled={isCIMDClient}
/>
{/if}
{#if mode == 'create'}
<FormInput
label={m.client_id()}
placeholder={m.generated()}
class="w-full"
description={m.custom_client_id_description()}
bind:input={$inputs.id}
/>
{/if}
</div>
</div>
{/if}