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>;
}