From 39ad844fb513a50b4a418151e99f1b68bc8b974e Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 5 Feb 2026 08:55:44 +0100 Subject: [PATCH] feat(console): manage OIDC back-channel logout uri (#11446) # Which Problems Are Solved The Management Console lacked the ability to configure the OIDC Back-Channel Logout URI for OIDC applications which was introduced in the API a while ago. # How the Problems Are Solved This PR adds the property to the OIDC application detail page. # Additional Changes None # Additional Context - closes #8469 - requires backport to v4.x --- .../projects/apps/app-detail/app-detail.component.html | 5 +++++ .../projects/apps/app-detail/app-detail.component.scss | 5 +++++ .../projects/apps/app-detail/app-detail.component.ts | 10 ++++++++++ console/src/assets/i18n/ar.json | 3 ++- console/src/assets/i18n/bg.json | 3 ++- console/src/assets/i18n/cs.json | 3 ++- console/src/assets/i18n/de.json | 3 ++- console/src/assets/i18n/en.json | 3 ++- console/src/assets/i18n/es.json | 3 ++- console/src/assets/i18n/fr.json | 3 ++- console/src/assets/i18n/hu.json | 3 ++- console/src/assets/i18n/id.json | 3 ++- console/src/assets/i18n/it.json | 3 ++- console/src/assets/i18n/ja.json | 3 ++- console/src/assets/i18n/ko.json | 3 ++- console/src/assets/i18n/mk.json | 3 ++- console/src/assets/i18n/nl.json | 3 ++- console/src/assets/i18n/pl.json | 3 ++- console/src/assets/i18n/pt.json | 3 ++- console/src/assets/i18n/ro.json | 3 ++- console/src/assets/i18n/ru.json | 3 ++- console/src/assets/i18n/sv.json | 3 ++- console/src/assets/i18n/tr.json | 3 ++- console/src/assets/i18n/uk.json | 3 ++- console/src/assets/i18n/zh.json | 3 ++- 25 files changed, 64 insertions(+), 22 deletions(-) diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html index 799134344..a35c8c1ea 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html @@ -158,6 +158,11 @@ {{ 'APP.LOGINV2.BASEURL' | translate }} + + + {{ 'APP.OIDC.BACKCHANNELLOOGOUTURI' | translate }} + + diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss b/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss index 0e90b712a..665bd51cf 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.scss @@ -276,6 +276,11 @@ &.full-width { flex-basis: 100%; + grid-column: 1 / -1; + + input { + max-width: none; + } } } diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts b/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts index 69b8bb33b..f9adea6a0 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.ts @@ -208,6 +208,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { authMethodType: [{ value: '', disabled: true }], loginV2: [{ value: false, disabled: true }], loginV2BaseURL: [{ value: '', disabled: true }], + backChannelLogoutURI: [{ value: '', disabled: true }], }); this.oidcTokenForm = this.fb.group({ @@ -444,6 +445,9 @@ export class AppDetailComponent implements OnInit, OnDestroy { const inSecs = this.app.oidcConfig?.clockSkew.seconds + this.app.oidcConfig?.clockSkew.nanos / 100000; this.oidcTokenForm.controls['clockSkewSeconds'].setValue(inSecs); } + if (this.app.oidcConfig?.backChannelLogoutUri) { + this.oidcForm.controls['backChannelLogoutURI'].setValue(this.app.oidcConfig.backChannelLogoutUri); + } if (this.app.oidcConfig?.loginVersion?.loginV1) { this.oidcForm.controls['loginV2'].setValue(false); } else if (this.app.oidcConfig?.loginVersion?.loginV2) { @@ -652,6 +656,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.app.oidcConfig.grantTypesList = this.grantTypesList?.value; this.app.oidcConfig.appType = this.appType?.value; this.app.oidcConfig.authMethodType = this.authMethodType?.value; + this.app.oidcConfig.backChannelLogoutUri = this.backChannelLogoutURI?.value; // token this.app.oidcConfig.accessTokenType = this.accessTokenType?.value; @@ -675,6 +680,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { req.setAuthMethodType(this.app.oidcConfig.authMethodType); req.setGrantTypesList(this.app.oidcConfig.grantTypesList); req.setAppType(this.app.oidcConfig.appType); + req.setBackChannelLogoutUri(this.app.oidcConfig.backChannelLogoutUri); const login = new LoginVersion(); if (this.oidcLoginV2?.value) { const loginV2 = new LoginV2(); @@ -878,6 +884,10 @@ export class AppDetailComponent implements OnInit, OnDestroy { return this.oidcForm.get('authMethodType'); } + public get backChannelLogoutURI(): AbstractControl | null { + return this.oidcForm.get('backChannelLogoutURI'); + } + public get oidcLoginV2(): FormControl | null { return this.oidcForm.get('loginV2') as FormControl; } diff --git a/console/src/assets/i18n/ar.json b/console/src/assets/i18n/ar.json index cce92ddbd..9fcde008b 100644 --- a/console/src/assets/i18n/ar.json +++ b/console/src/assets/i18n/ar.json @@ -2671,7 +2671,8 @@ "DESCRIPTION": "تطبيقات الصفحة الواحدة (SPA) وبشكل عام جميع أطر عمل JS التي يتم تنفيذها في المتصفحات" } } - } + }, + "BACKCHANNELLOOGOUTURI": "عنوان URI لتسجيل الخروج من القناة الخلفية" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/bg.json b/console/src/assets/i18n/bg.json index c03dd150b..0406dd8bc 100644 --- a/console/src/assets/i18n/bg.json +++ b/console/src/assets/i18n/bg.json @@ -2678,7 +2678,8 @@ "DESCRIPTION": "Single Page Applications (SPA) и като цяло всички JS рамки, изпълнявани в браузъри" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/cs.json b/console/src/assets/i18n/cs.json index 11be88c10..486e85332 100644 --- a/console/src/assets/i18n/cs.json +++ b/console/src/assets/i18n/cs.json @@ -2660,7 +2660,8 @@ "DESCRIPTION": "Single Page Aplikace (SPA) a obecně všechny JS frameworky spouštěné v prohlížečích" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index c85b4616d..1a54bdbbc 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -2651,7 +2651,8 @@ "DESCRIPTION": "Single Page Applications (SPA) und grundsätzlich alle im Browser aufgeführten JS-Frameworks" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 6c38d8664..28ae9176f 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -2681,7 +2681,8 @@ "DESCRIPTION": "Single Page Applications (SPA) and in general all JS frameworks executed in browsers" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/es.json b/console/src/assets/i18n/es.json index 1d44b3981..d3b25b258 100644 --- a/console/src/assets/i18n/es.json +++ b/console/src/assets/i18n/es.json @@ -2648,7 +2648,8 @@ "DESCRIPTION": "Single Page Applications (SPA) y en general todos los frameworks de JS ejecutados en navegadores" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index 6b554361a..d82cb5883 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -2652,7 +2652,8 @@ "DESCRIPTION": "Single Page Applications (SPA) et en général tous les frameworks JS exécutés dans les navigateurs" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/hu.json b/console/src/assets/i18n/hu.json index 54f8ee6d7..a4d549eef 100644 --- a/console/src/assets/i18n/hu.json +++ b/console/src/assets/i18n/hu.json @@ -2675,7 +2675,8 @@ "DESCRIPTION": "Egylapos alkalmazások (SPA) és általában minden böngészőben futó JS keretrendszer" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/id.json b/console/src/assets/i18n/id.json index e5a789e8f..a80960532 100644 --- a/console/src/assets/i18n/id.json +++ b/console/src/assets/i18n/id.json @@ -2675,7 +2675,8 @@ "DESCRIPTION": "Aplikasi Halaman Tunggal (SPA) dan secara umum semua kerangka JS dijalankan di browser" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index fb83b5267..3e4d9843a 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -2652,7 +2652,8 @@ "DESCRIPTION": "Single Page Applications (SPA) e in generale tutti i framework JS eseguiti nei browser" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/ja.json b/console/src/assets/i18n/ja.json index 8fae02742..715e7cc66 100644 --- a/console/src/assets/i18n/ja.json +++ b/console/src/assets/i18n/ja.json @@ -2677,7 +2677,8 @@ "DESCRIPTION": "シングルページアプリケーション(SPA)および一般に、ブラウザで実行されるすべてのJSフレームワーク" } } - } + }, + "BACKCHANNELLOOGOUTURI": "バックチャネルログアウトURI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/ko.json b/console/src/assets/i18n/ko.json index e2189db2a..2fa0eb26e 100644 --- a/console/src/assets/i18n/ko.json +++ b/console/src/assets/i18n/ko.json @@ -2677,7 +2677,8 @@ "DESCRIPTION": "단일 페이지 애플리케이션(SPA) 및 브라우저에서 실행되는 모든 JS 프레임워크" } } - } + }, + "BACKCHANNELLOOGOUTURI": "백채널 로그아웃 URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/mk.json b/console/src/assets/i18n/mk.json index 10feab4ef..058d66ed3 100644 --- a/console/src/assets/i18n/mk.json +++ b/console/src/assets/i18n/mk.json @@ -2648,7 +2648,8 @@ "DESCRIPTION": "Single Page Applications (SPA) и воопшто сите JS frameworks кои се извршуваат во прелистувачите" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/nl.json b/console/src/assets/i18n/nl.json index 7826c314a..e9540fcdd 100644 --- a/console/src/assets/i18n/nl.json +++ b/console/src/assets/i18n/nl.json @@ -2670,7 +2670,8 @@ "DESCRIPTION": "Single Page Applications (SPA) en over het algemeen alle JS-frameworks die in browsers worden uitgevoerd" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/pl.json b/console/src/assets/i18n/pl.json index 37ad78ff4..3af88e7bc 100644 --- a/console/src/assets/i18n/pl.json +++ b/console/src/assets/i18n/pl.json @@ -2651,7 +2651,8 @@ "DESCRIPTION": "Aplikacje jednoszczelinowe (SPA) i ogólnie wszystkie frameworki JS wykonywane w przeglądarkach" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/pt.json b/console/src/assets/i18n/pt.json index d3b79bc3d..b442a1ba2 100644 --- a/console/src/assets/i18n/pt.json +++ b/console/src/assets/i18n/pt.json @@ -2647,7 +2647,8 @@ "DESCRIPTION": "Aplicativos de página única (SPA) e, em geral, todos os frameworks JS executados em navegadores" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/ro.json b/console/src/assets/i18n/ro.json index e5fc1a500..65dee13a9 100644 --- a/console/src/assets/i18n/ro.json +++ b/console/src/assets/i18n/ro.json @@ -2673,7 +2673,8 @@ "DESCRIPTION": "Aplicații cu o singură pagină (SPA) și în general toate cadrele JS executate în browsere" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/ru.json b/console/src/assets/i18n/ru.json index e971af989..26716c728 100644 --- a/console/src/assets/i18n/ru.json +++ b/console/src/assets/i18n/ru.json @@ -2767,7 +2767,8 @@ "DESCRIPTION": "Одностраничные приложения (SPA) и все JS-фреймворки, выполняемые в браузерах." } } - } + }, + "BACKCHANNELLOOGOUTURI": "URI выхода из системы через резервный канал" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/sv.json b/console/src/assets/i18n/sv.json index 95e9c8aab..8ac458f44 100644 --- a/console/src/assets/i18n/sv.json +++ b/console/src/assets/i18n/sv.json @@ -2680,7 +2680,8 @@ "DESCRIPTION": "Single Page Applications (SPA) och i allmänhet alla JS-ramverk som körs i webbläsare" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/tr.json b/console/src/assets/i18n/tr.json index 41939f34c..08c52e6ea 100644 --- a/console/src/assets/i18n/tr.json +++ b/console/src/assets/i18n/tr.json @@ -2680,7 +2680,8 @@ "DESCRIPTION": "Tek Sayfa Uygulamaları (SPA) ve genel olarak tarayıcılarda çalıştırılan tüm JS framework'leri" } } - } + }, + "BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/uk.json b/console/src/assets/i18n/uk.json index d9dc4a689..458fffa2a 100644 --- a/console/src/assets/i18n/uk.json +++ b/console/src/assets/i18n/uk.json @@ -2683,7 +2683,8 @@ "DESCRIPTION": "Односторінкові додатки (SPA) та загалом усі JS фреймворки, що виконуються в браузерах" } } - } + }, + "BACKCHANNELLOOGOUTURI": "URI виходу з зворотного каналу" }, "API": { "INFO": { diff --git a/console/src/assets/i18n/zh.json b/console/src/assets/i18n/zh.json index 5567e3ce0..c45915f9d 100644 --- a/console/src/assets/i18n/zh.json +++ b/console/src/assets/i18n/zh.json @@ -2684,7 +2684,8 @@ "DESCRIPTION": "单页应用程序 (SPA) 以及通常在浏览器中执行的所有 JS 框架" } } - } + }, + "BACKCHANNELLOOGOUTURI": "反向通道注销URI" }, "API": { "INFO": {