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 fff6f26c97..a64c0bce32 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
@@ -198,11 +198,21 @@
+
{{ 'APP.OIDC.CLIENTID' | translate }}
+
+ {{ 'APP.TYPE' | translate }}
+
+
+ {{ 'APP.OIDC.APPTYPE.'+type | translate }}
+
+
+
+
{{ 'APP.OIDC.RESPONSETYPE' | translate }}
@@ -212,24 +222,6 @@
-
- {{ 'APP.OIDC.GRANTTYPE' | translate }}
-
-
- {{ 'APP.OIDC.GRANT.'+grant | translate }}
-
-
-
-
-
- {{ 'APP.TYPE' | translate }}
-
-
- {{ 'APP.OIDC.APPTYPE.'+type | translate }}
-
-
-
-
{{ 'APP.AUTHMETHOD' | translate }}
@@ -239,6 +231,21 @@
+
+ {{ 'APP.OIDC.GRANTTYPE' | translate }}
+
+
+ {{ 'APP.OIDC.GRANT.'+grant | translate }}
+
+
+
+
+
+ {{ 'APP.OIDC.REFRESHTOKEN' | translate }}
+
+
+
{{'APP.OIDC.TOKENSECTIONTITLE' | translate}}
@@ -311,4 +318,4 @@
-
\ No newline at end of file
+
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 032d5c772c..9528e179a8 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
@@ -142,6 +142,17 @@
flex-wrap: wrap;
margin: 0 -.5rem;
+ .grid {
+ width: 100%;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+
+ .rt {
+ margin-top: 2.3rem;
+ margin-left: .5rem;
+ }
+ }
+
&.nowrap {
flex-wrap: nowrap;
}
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 3505aec9f1..690097e795 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
@@ -3,6 +3,7 @@ import { Location } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { MatCheckboxChange } from '@angular/material/checkbox';
import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { ActivatedRoute, Params, Router } from '@angular/router';
@@ -112,6 +113,7 @@ export class AppDetailComponent implements OnInit, OnDestroy {
public OIDCAuthMethodType: any = OIDCAuthMethodType;
public APIAuthMethodType: any = APIAuthMethodType;
public OIDCTokenType: any = OIDCTokenType;
+ public OIDCGrantType: any = OIDCGrantType;
public ChangeType: any = ChangeType;
@@ -439,6 +441,24 @@ export class AppDetailComponent implements OnInit, OnDestroy {
}
}
+ public toggleRefreshToken(event: MatCheckboxChange): void {
+ const c = this.grantTypesList?.value;
+
+ if (event.checked) {
+ if (!c.includes(OIDCGrantType.OIDC_GRANT_TYPE_REFRESH_TOKEN)) {
+ this.grantTypesList?.setValue([OIDCGrantType.OIDC_GRANT_TYPE_REFRESH_TOKEN, ...c]);
+ }
+ } else {
+ const index = (this.grantTypesList?.value as OIDCGrantType[])
+ .findIndex(gt => gt === OIDCGrantType.OIDC_GRANT_TYPE_REFRESH_TOKEN);
+ if (index > -1) {
+ const copy = Object.assign([], this.grantTypesList?.value);
+ copy.splice(index, 1);
+ this.grantTypesList?.setValue(copy);
+ }
+ }
+ }
+
public saveOIDCApp(): void {
this.requestRedirectValuesSubject$.next();
diff --git a/console/src/app/pages/projects/apps/authmethods.ts b/console/src/app/pages/projects/apps/authmethods.ts
index 34b9d9612e..a46b40d64f 100644
--- a/console/src/app/pages/projects/apps/authmethods.ts
+++ b/console/src/app/pages/projects/apps/authmethods.ts
@@ -1,237 +1,277 @@
import { RadioItemAuthType } from 'src/app/modules/app-radio/app-auth-method-radio/app-auth-method-radio.component';
import {
- APIAuthMethodType,
- APIConfig,
- OIDCAuthMethodType,
- OIDCConfig,
- OIDCGrantType,
- OIDCResponseType,
+ APIAuthMethodType,
+ APIConfig,
+ OIDCAuthMethodType,
+ OIDCConfig,
+ OIDCGrantType,
+ OIDCResponseType,
} from 'src/app/proto/generated/zitadel/app_pb';
export const CODE_METHOD: RadioItemAuthType = {
- key: 'CODE',
- titleI18nKey: 'APP.AUTHMETHODS.CODE.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.CODE.DESCRIPTION',
- disabled: false,
- prefix: 'CODE',
- background: 'rgb(89 115 128)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_BASIC,
- recommended: false,
+ key: 'CODE',
+ titleI18nKey: 'APP.AUTHMETHODS.CODE.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.CODE.DESCRIPTION',
+ disabled: false,
+ prefix: 'CODE',
+ background: 'rgb(89 115 128)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_BASIC,
+ recommended: false,
};
export const PKCE_METHOD: RadioItemAuthType = {
- key: 'PKCE',
- titleI18nKey: 'APP.AUTHMETHODS.PKCE.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.PKCE.DESCRIPTION',
- disabled: false,
- prefix: 'PKCE',
- background: 'rgb(80 110 92)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE,
- recommended: true,
+ key: 'PKCE',
+ titleI18nKey: 'APP.AUTHMETHODS.PKCE.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.PKCE.DESCRIPTION',
+ disabled: false,
+ prefix: 'PKCE',
+ background: 'rgb(80 110 92)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE,
+ recommended: true,
};
export const POST_METHOD: RadioItemAuthType = {
- key: 'POST',
- titleI18nKey: 'APP.AUTHMETHODS.POST.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.POST.DESCRIPTION',
- disabled: false,
- prefix: 'POST',
- background: 'rgb(144 75 75)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST,
- notRecommended: true,
+ key: 'POST',
+ titleI18nKey: 'APP.AUTHMETHODS.POST.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.POST.DESCRIPTION',
+ disabled: false,
+ prefix: 'POST',
+ background: 'rgb(144 75 75)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST,
+ notRecommended: true,
};
export const PK_JWT_METHOD: RadioItemAuthType = {
- key: 'PK_JWT',
- titleI18nKey: 'APP.AUTHMETHODS.PK_JWT.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.PK_JWT.DESCRIPTION',
- disabled: false,
- prefix: 'JWT',
- background: 'rgb(89, 93, 128)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_PRIVATE_KEY_JWT,
- apiAuthMethod: APIAuthMethodType.API_AUTH_METHOD_TYPE_PRIVATE_KEY_JWT,
- // recommended: true,
+ key: 'PK_JWT',
+ titleI18nKey: 'APP.AUTHMETHODS.PK_JWT.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.PK_JWT.DESCRIPTION',
+ disabled: false,
+ prefix: 'JWT',
+ background: 'rgb(89, 93, 128)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_PRIVATE_KEY_JWT,
+ apiAuthMethod: APIAuthMethodType.API_AUTH_METHOD_TYPE_PRIVATE_KEY_JWT,
+ // recommended: true,
};
export const BASIC_AUTH_METHOD: RadioItemAuthType = {
- key: 'BASIC',
- titleI18nKey: 'APP.AUTHMETHODS.BASIC.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.BASIC.DESCRIPTION',
- disabled: false,
- prefix: 'BASIC',
- background: 'rgb(144 75 75)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST,
- apiAuthMethod: APIAuthMethodType.API_AUTH_METHOD_TYPE_BASIC,
+ key: 'BASIC',
+ titleI18nKey: 'APP.AUTHMETHODS.BASIC.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.BASIC.DESCRIPTION',
+ disabled: false,
+ prefix: 'BASIC',
+ background: 'rgb(144 75 75)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_CODE,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_AUTHORIZATION_CODE,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_POST,
+ apiAuthMethod: APIAuthMethodType.API_AUTH_METHOD_TYPE_BASIC,
};
export const IMPLICIT_METHOD: RadioItemAuthType = {
- key: 'IMPLICIT',
- titleI18nKey: 'APP.AUTHMETHODS.IMPLICIT.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.IMPLICIT.DESCRIPTION',
- disabled: false,
- prefix: 'IMP',
- background: 'rgb(144 75 75)',
- responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_ID_TOKEN,
- grantType: OIDCGrantType.OIDC_GRANT_TYPE_IMPLICIT,
- authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE,
- notRecommended: true,
+ key: 'IMPLICIT',
+ titleI18nKey: 'APP.AUTHMETHODS.IMPLICIT.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.IMPLICIT.DESCRIPTION',
+ disabled: false,
+ prefix: 'IMP',
+ background: 'rgb(144 75 75)',
+ responseType: OIDCResponseType.OIDC_RESPONSE_TYPE_ID_TOKEN,
+ grantType: OIDCGrantType.OIDC_GRANT_TYPE_IMPLICIT,
+ authMethod: OIDCAuthMethodType.OIDC_AUTH_METHOD_TYPE_NONE,
+ notRecommended: true,
};
export const CUSTOM_METHOD: RadioItemAuthType = {
- key: 'CUSTOM',
- titleI18nKey: 'APP.AUTHMETHODS.CUSTOM.TITLE',
- descI18nKey: 'APP.AUTHMETHODS.CUSTOM.DESCRIPTION',
- disabled: false,
- prefix: 'CUSTOM',
- background: '#333',
+ key: 'CUSTOM',
+ titleI18nKey: 'APP.AUTHMETHODS.CUSTOM.TITLE',
+ descI18nKey: 'APP.AUTHMETHODS.CUSTOM.DESCRIPTION',
+ disabled: false,
+ prefix: 'CUSTOM',
+ background: '#333',
};
export function getPartialConfigFromAuthMethod(authMethod: string): {
- oidc?: Partial