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
This commit is contained in:
Livio Spring
2026-02-05 07:55:44 +00:00
committed by GitHub
parent 4936bdf2c9
commit 39ad844fb5
25 changed files with 64 additions and 22 deletions
@@ -158,6 +158,11 @@
<cnsl-label>{{ 'APP.LOGINV2.BASEURL' | translate }}</cnsl-label>
<input cnslInput formControlName="loginV2BaseURL" />
</cnsl-form-field>
<cnsl-form-field class="app-formfield full-width">
<cnsl-label>{{ 'APP.OIDC.BACKCHANNELLOOGOUTURI' | translate }}</cnsl-label>
<input cnslInput formControlName="backChannelLogoutURI" />
</cnsl-form-field>
</div>
</div>
@@ -276,6 +276,11 @@
&.full-width {
flex-basis: 100%;
grid-column: 1 / -1;
input {
max-width: none;
}
}
}
@@ -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<boolean> | null {
return this.oidcForm.get('loginV2') as FormControl<boolean>;
}
+2 -1
View File
@@ -2671,7 +2671,8 @@
"DESCRIPTION": "تطبيقات الصفحة الواحدة (SPA) وبشكل عام جميع أطر عمل JS التي يتم تنفيذها في المتصفحات"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "عنوان URI لتسجيل الخروج من القناة الخلفية"
},
"API": {
"INFO": {
+2 -1
View File
@@ -2678,7 +2678,8 @@
"DESCRIPTION": "Single Page Applications (SPA) и като цяло всички JS рамки, изпълнявани в браузъри"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI"
},
"API": {
"INFO": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -2677,7 +2677,8 @@
"DESCRIPTION": "シングルページアプリケーション(SPA)および一般に、ブラウザで実行されるすべてのJSフレームワーク"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "バックチャネルログアウトURI"
},
"API": {
"INFO": {
+2 -1
View File
@@ -2677,7 +2677,8 @@
"DESCRIPTION": "단일 페이지 애플리케이션(SPA) 및 브라우저에서 실행되는 모든 JS 프레임워크"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "백채널 로그아웃 URI"
},
"API": {
"INFO": {
+2 -1
View File
@@ -2648,7 +2648,8 @@
"DESCRIPTION": "Single Page Applications (SPA) и воопшто сите JS frameworks кои се извршуваат во прелистувачите"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "Back-Channel Logout URI"
},
"API": {
"INFO": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -2767,7 +2767,8 @@
"DESCRIPTION": "Одностраничные приложения (SPA) и все JS-фреймворки, выполняемые в браузерах."
}
}
}
},
"BACKCHANNELLOOGOUTURI": "URI выхода из системы через резервный канал"
},
"API": {
"INFO": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -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": {
+2 -1
View File
@@ -2683,7 +2683,8 @@
"DESCRIPTION": "Односторінкові додатки (SPA) та загалом усі JS фреймворки, що виконуються в браузерах"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "URI виходу з зворотного каналу"
},
"API": {
"INFO": {
+2 -1
View File
@@ -2684,7 +2684,8 @@
"DESCRIPTION": "单页应用程序 (SPA) 以及通常在浏览器中执行的所有 JS 框架"
}
}
}
},
"BACKCHANNELLOOGOUTURI": "反向通道注销URI"
},
"API": {
"INFO": {