mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 02:10:05 +00:00 
			
		
		
		
	See: https://chatgpt.com/share/68bb0b25-96bc-800f-8ff7-9ca8d7c7af11
		
			
				
	
	
		
			2367 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			2367 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
| {
 | |
|   "realm": "{{ KEYCLOAK_REALM }}",
 | |
|   "displayName": "",
 | |
|   "displayNameHtml": "",
 | |
|   "notBefore": 0,
 | |
|   "defaultSignatureAlgorithm": "RS256",
 | |
|   "revokeRefreshToken": false,
 | |
|   "refreshTokenMaxReuse": 0,
 | |
|   "accessTokenLifespan": 300,
 | |
|   "accessTokenLifespanForImplicitFlow": 900,
 | |
|   "ssoSessionIdleTimeout": 1800,
 | |
|   "ssoSessionMaxLifespan": 36000,
 | |
|   "ssoSessionIdleTimeoutRememberMe": 0,
 | |
|   "ssoSessionMaxLifespanRememberMe": 0,
 | |
|   "offlineSessionIdleTimeout": 2592000,
 | |
|   "offlineSessionMaxLifespanEnabled": false,
 | |
|   "offlineSessionMaxLifespan": 5184000,
 | |
|   "clientSessionIdleTimeout": 0,
 | |
|   "clientSessionMaxLifespan": 0,
 | |
|   "clientOfflineSessionIdleTimeout": 0,
 | |
|   "clientOfflineSessionMaxLifespan": 0,
 | |
|   "accessCodeLifespan": 60,
 | |
|   "accessCodeLifespanUserAction": 300,
 | |
|   "accessCodeLifespanLogin": 1800,
 | |
|   "actionTokenGeneratedByAdminLifespan": 43200,
 | |
|   "actionTokenGeneratedByUserLifespan": 300,
 | |
|   "oauth2DeviceCodeLifespan": 600,
 | |
|   "oauth2DevicePollingInterval": 5,
 | |
|   "enabled": true,
 | |
|   "sslRequired": "external",
 | |
|   "registrationAllowed": false,
 | |
|   "registrationEmailAsUsername": false,
 | |
|   "rememberMe": true,
 | |
|   "verifyEmail": false,
 | |
|   "loginWithEmailAllowed": true,
 | |
|   "duplicateEmailsAllowed": false,
 | |
|   "resetPasswordAllowed": true,
 | |
|   "editUsernameAllowed": false,
 | |
|   "bruteForceProtected": false,
 | |
|   "permanentLockout": false,
 | |
|   "maxTemporaryLockouts": 0,
 | |
|   "bruteForceStrategy": "MULTIPLE",
 | |
|   "maxFailureWaitSeconds": 900,
 | |
|   "minimumQuickLoginWaitSeconds": 60,
 | |
|   "waitIncrementSeconds": 60,
 | |
|   "quickLoginCheckMilliSeconds": 1000,
 | |
|   "maxDeltaTimeSeconds": 43200,
 | |
|   "failureFactor": 30,
 | |
|   "roles": {
 | |
|     "realm": [
 | |
|       {
 | |
|         "name": "offline_access",
 | |
|         "description": "${role_offline-access}",
 | |
|         "composite": false,
 | |
|         "clientRole": false,
 | |
|         "containerId": "3b03105b-5fe6-4b53-ba24-c8796525be0e",
 | |
|         "attributes": {}
 | |
|       },
 | |
|       {
 | |
|         "name": "default-roles-{{ KEYCLOAK_REALM }}",
 | |
|         "description": "${role_default-roles}",
 | |
|         "composite": true,
 | |
|         "composites": {
 | |
|           "realm": [
 | |
|             "offline_access",
 | |
|             "uma_authorization"
 | |
|           ],
 | |
|           "client": {
 | |
|             "account": [
 | |
|               "view-profile",
 | |
|               "manage-account"
 | |
|             ]
 | |
|           }
 | |
|         },
 | |
|         "clientRole": false,
 | |
|         "containerId": "3b03105b-5fe6-4b53-ba24-c8796525be0e",
 | |
|         "attributes": {}
 | |
|       },
 | |
|       {
 | |
|         "name": "uma_authorization",
 | |
|         "description": "${role_uma_authorization}",
 | |
|         "composite": false,
 | |
|         "clientRole": false,
 | |
|         "containerId": "3b03105b-5fe6-4b53-ba24-c8796525be0e",
 | |
|         "attributes": {}
 | |
|       }
 | |
|     ],
 | |
|     "client": {
 | |
|       "realm-management": [
 | |
|         {
 | |
|           "name": "manage-realm",
 | |
|           "description": "${role_manage-realm}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-identity-providers",
 | |
|           "description": "${role_view-identity-providers}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-clients",
 | |
|           "description": "${role_view-clients}",
 | |
|           "composite": true,
 | |
|           "composites": {
 | |
|             "client": {
 | |
|               "realm-management": [
 | |
|                 "query-clients"
 | |
|               ]
 | |
|             }
 | |
|           },
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "impersonation",
 | |
|           "description": "${role_impersonation}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "query-realms",
 | |
|           "description": "${role_query-realms}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "create-client",
 | |
|           "description": "${role_create-client}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-events",
 | |
|           "description": "${role_view-events}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-authorization",
 | |
|           "description": "${role_manage-authorization}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-events",
 | |
|           "description": "${role_manage-events}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "realm-admin",
 | |
|           "description": "${role_realm-admin}",
 | |
|           "composite": true,
 | |
|           "composites": {
 | |
|             "client": {
 | |
|               "realm-management": [
 | |
|                 "view-identity-providers",
 | |
|                 "manage-realm",
 | |
|                 "view-clients",
 | |
|                 "query-realms",
 | |
|                 "impersonation",
 | |
|                 "create-client",
 | |
|                 "view-events",
 | |
|                 "manage-events",
 | |
|                 "manage-authorization",
 | |
|                 "manage-identity-providers",
 | |
|                 "view-authorization",
 | |
|                 "manage-users",
 | |
|                 "query-users",
 | |
|                 "view-users",
 | |
|                 "query-groups",
 | |
|                 "view-realm",
 | |
|                 "manage-clients",
 | |
|                 "query-clients"
 | |
|               ]
 | |
|             }
 | |
|           },
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-identity-providers",
 | |
|           "description": "${role_manage-identity-providers}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-authorization",
 | |
|           "description": "${role_view-authorization}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-users",
 | |
|           "description": "${role_manage-users}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "query-users",
 | |
|           "description": "${role_query-users}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "query-groups",
 | |
|           "description": "${role_query-groups}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-users",
 | |
|           "description": "${role_view-users}",
 | |
|           "composite": true,
 | |
|           "composites": {
 | |
|             "client": {
 | |
|               "realm-management": [
 | |
|                 "query-users",
 | |
|                 "query-groups"
 | |
|               ]
 | |
|             }
 | |
|           },
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-realm",
 | |
|           "description": "${role_view-realm}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-clients",
 | |
|           "description": "${role_manage-clients}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "query-clients",
 | |
|           "description": "${role_query-clients}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "9c99467a-9826-40e2-a512-3c6cc9c4072c",
 | |
|           "attributes": {}
 | |
|         }
 | |
|       ],
 | |
|       "{{ KEYCLOAK_REALM }}": [],
 | |
|       "security-admin-console": [],
 | |
|       "admin-cli": [],
 | |
|       "account-console": [],
 | |
|       "broker": [
 | |
|         {
 | |
|           "name": "read-token",
 | |
|           "description": "${role_read-token}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "621b9b88-4963-4d4f-9d11-18cfd82fce4a",
 | |
|           "attributes": {}
 | |
|         }
 | |
|       ],
 | |
|       "account": [
 | |
|         {
 | |
|           "name": "delete-account",
 | |
|           "description": "${role_delete-account}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-account-links",
 | |
|           "description": "${role_manage-account-links}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-profile",
 | |
|           "description": "${role_view-profile}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-groups",
 | |
|           "description": "${role_view-groups}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-applications",
 | |
|           "description": "${role_view-applications}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "view-consent",
 | |
|           "description": "${role_view-consent}",
 | |
|           "composite": false,
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-consent",
 | |
|           "description": "${role_manage-consent}",
 | |
|           "composite": true,
 | |
|           "composites": {
 | |
|             "client": {
 | |
|               "account": [
 | |
|                 "view-consent"
 | |
|               ]
 | |
|             }
 | |
|           },
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         },
 | |
|         {
 | |
|           "name": "manage-account",
 | |
|           "description": "${role_manage-account}",
 | |
|           "composite": true,
 | |
|           "composites": {
 | |
|             "client": {
 | |
|               "account": [
 | |
|                 "manage-account-links"
 | |
|               ]
 | |
|             }
 | |
|           },
 | |
|           "clientRole": true,
 | |
|           "containerId": "001f882c-3b44-4120-8ecc-bf7414e74cd9",
 | |
|           "attributes": {}
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   },
 | |
|   "groups": [],
 | |
|   "defaultRole": {
 | |
|     "name": "default-roles-{{ KEYCLOAK_REALM }}",
 | |
|     "description": "${role_default-roles}",
 | |
|     "composite": true,
 | |
|     "clientRole": false,
 | |
|     "containerId": "3b03105b-5fe6-4b53-ba24-c8796525be0e"
 | |
|   },
 | |
|   "requiredCredentials": [
 | |
|     "password"
 | |
|   ],
 | |
|   "passwordPolicy": "length(16) and notEmail(undefined) and upperCase(1) and lowerCase(1) and digits(1) and specialChars(1)",
 | |
|   "otpPolicyType": "totp",
 | |
|   "otpPolicyAlgorithm": "HmacSHA1",
 | |
|   "otpPolicyInitialCounter": 0,
 | |
|   "otpPolicyDigits": 6,
 | |
|   "otpPolicyLookAheadWindow": 1,
 | |
|   "otpPolicyPeriod": 30,
 | |
|   "otpPolicyCodeReusable": false,
 | |
|   "otpSupportedApplications": [
 | |
|     "totpAppFreeOTPName",
 | |
|     "totpAppGoogleName",
 | |
|     "totpAppMicrosoftAuthenticatorName"
 | |
|   ],
 | |
|   "localizationTexts": {},
 | |
|   "webAuthnPolicyRpEntityName": "keycloak",
 | |
|   "webAuthnPolicySignatureAlgorithms": [
 | |
|     "ES256",
 | |
|     "RS256"
 | |
|   ],
 | |
|   "webAuthnPolicyRpId": "",
 | |
|   "webAuthnPolicyAttestationConveyancePreference": "not specified",
 | |
|   "webAuthnPolicyAuthenticatorAttachment": "not specified",
 | |
|   "webAuthnPolicyRequireResidentKey": "not specified",
 | |
|   "webAuthnPolicyUserVerificationRequirement": "not specified",
 | |
|   "webAuthnPolicyCreateTimeout": 0,
 | |
|   "webAuthnPolicyAvoidSameAuthenticatorRegister": false,
 | |
|   "webAuthnPolicyAcceptableAaguids": [],
 | |
|   "webAuthnPolicyExtraOrigins": [],
 | |
|   "webAuthnPolicyPasswordlessRpEntityName": "keycloak",
 | |
|   "webAuthnPolicyPasswordlessSignatureAlgorithms": [
 | |
|     "ES256",
 | |
|     "RS256"
 | |
|   ],
 | |
|   "webAuthnPolicyPasswordlessRpId": "",
 | |
|   "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified",
 | |
|   "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified",
 | |
|   "webAuthnPolicyPasswordlessRequireResidentKey": "not specified",
 | |
|   "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified",
 | |
|   "webAuthnPolicyPasswordlessCreateTimeout": 0,
 | |
|   "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false,
 | |
|   "webAuthnPolicyPasswordlessAcceptableAaguids": [],
 | |
|   "webAuthnPolicyPasswordlessExtraOrigins": [],
 | |
|   "users": [
 | |
|     {
 | |
|       "username": "service-account-{{ KEYCLOAK_REALM }}",
 | |
|       "emailVerified": false,
 | |
|       "createdTimestamp": 1737925519602,
 | |
|       "enabled": true,
 | |
|       "totp": false,
 | |
|       "serviceAccountClientId": "{{ KEYCLOAK_REALM }}",
 | |
|       "disableableCredentialTypes": [],
 | |
|       "requiredActions": [
 | |
|         "CONFIGURE_TOTP"
 | |
|       ],
 | |
|       "realmRoles": [
 | |
|         "default-roles-{{ KEYCLOAK_REALM }}"
 | |
|       ],
 | |
|       "notBefore": 0,
 | |
|       "groups": []
 | |
|     }
 | |
|   ],
 | |
|   "scopeMappings": [
 | |
|     {
 | |
|       "clientScope": "offline_access",
 | |
|       "roles": [
 | |
|         "offline_access"
 | |
|       ]
 | |
|     }
 | |
|   ],
 | |
|   "clientScopeMappings": {
 | |
|     "account": [
 | |
|       {
 | |
|         "client": "account-console",
 | |
|         "roles": [
 | |
|           "manage-account",
 | |
|           "view-groups"
 | |
|         ]
 | |
|       }
 | |
|     ]
 | |
|   },
 | |
|   "clients": [
 | |
|     {
 | |
|       "clientId": "account",
 | |
|       "name": "${client_account}",
 | |
|       "description": "",
 | |
|       "rootUrl": "${authBaseUrl}",
 | |
|       "adminUrl": "",
 | |
|       "baseUrl": "/realms/{{ KEYCLOAK_REALM }}/account/",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [
 | |
|         "/realms/{{ KEYCLOAK_REALM }}/account/*"
 | |
|       ],
 | |
|       "webOrigins": [
 | |
|         "{{ domains | get_url('web-app-keycloak', WEB_PROTOCOL) }}"
 | |
|       ],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": false,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": true,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": false,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": true,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "false",
 | |
|         "oidc.ciba.grant.enabled": "false",
 | |
|         "backchannel.logout.session.required": "true",
 | |
|         "post.logout.redirect.uris": "+",
 | |
|         "oauth2.device.authorization.grant.enabled": "false",
 | |
|         "display.on.consent.screen": "false",
 | |
|         "backchannel.logout.revoke.offline.tokens": "false"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": false,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "clientId": "account-console",
 | |
|       "name": "${client_account-console}",
 | |
|       "description": "",
 | |
|       "rootUrl": "${authBaseUrl}",
 | |
|       "adminUrl": "",
 | |
|       "baseUrl": "/realms/{{ KEYCLOAK_REALM }}/account/",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [
 | |
|         "/realms/{{ KEYCLOAK_REALM }}/account/*"
 | |
|       ],
 | |
|       "webOrigins": [
 | |
|         "*"
 | |
|       ],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": false,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": true,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": false,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": true,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "false",
 | |
|         "oidc.ciba.grant.enabled": "false",
 | |
|         "backchannel.logout.session.required": "true",
 | |
|         "post.logout.redirect.uris": "+",
 | |
|         "oauth2.device.authorization.grant.enabled": "false",
 | |
|         "display.on.consent.screen": "false",
 | |
|         "pkce.code.challenge.method": "S256",
 | |
|         "backchannel.logout.revoke.offline.tokens": "false"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": false,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "audience resolve",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-audience-resolve-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {}
 | |
|         }
 | |
|       ],
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "clientId": "admin-cli",
 | |
|       "name": "${client_admin-cli}",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [],
 | |
|       "webOrigins": [],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": false,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": false,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": true,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": true,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "false",
 | |
|         "client.use.lightweight.access.token.enabled": "true"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": true,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "clientId": "broker",
 | |
|       "name": "${client_broker}",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [],
 | |
|       "webOrigins": [],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": true,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": true,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": false,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": false,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "true"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": false,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "clientId": "realm-management",
 | |
|       "name": "${client_realm-management}",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [],
 | |
|       "webOrigins": [],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": true,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": true,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": false,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": false,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "true"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": false,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "clientId": "security-admin-console",
 | |
|       "name": "${client_security-admin-console}",
 | |
|       "rootUrl": "${authAdminUrl}",
 | |
|       "baseUrl": "/admin/{{ KEYCLOAK_REALM }}/console/",
 | |
|       "surrogateAuthRequired": false,
 | |
|       "enabled": true,
 | |
|       "alwaysDisplayInConsole": false,
 | |
|       "clientAuthenticatorType": "desktop-secret",
 | |
|       "redirectUris": [
 | |
|         "/admin/{{ KEYCLOAK_REALM }}/console/*"
 | |
|       ],
 | |
|       "webOrigins": [
 | |
|         "+"
 | |
|       ],
 | |
|       "notBefore": 0,
 | |
|       "bearerOnly": false,
 | |
|       "consentRequired": false,
 | |
|       "standardFlowEnabled": true,
 | |
|       "implicitFlowEnabled": false,
 | |
|       "directAccessGrantsEnabled": false,
 | |
|       "serviceAccountsEnabled": false,
 | |
|       "publicClient": true,
 | |
|       "frontchannelLogout": false,
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "realm_client": "false",
 | |
|         "client.use.lightweight.access.token.enabled": "true",
 | |
|         "post.logout.redirect.uris": "+",
 | |
|         "pkce.code.challenge.method": "S256"
 | |
|       },
 | |
|       "authenticationFlowBindingOverrides": {},
 | |
|       "fullScopeAllowed": true,
 | |
|       "nodeReRegistrationTimeout": 0,
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "locale",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "locale",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "locale",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "defaultClientScopes": [
 | |
|         "web-origins",
 | |
|         "acr",
 | |
|         "roles",
 | |
|         "profile",
 | |
|         "basic",
 | |
|         "email"
 | |
|       ],
 | |
|       "optionalClientScopes": [
 | |
|         "address",
 | |
|         "phone",
 | |
|         "organization",
 | |
|         "offline_access",
 | |
|         "microprofile-jwt"
 | |
|       ]
 | |
|     },
 | |
|     {% include "clients/default.json.j2" %}
 | |
|   ],
 | |
|   "clientScopes": [
 | |
|     {
 | |
|       "name": "role_list",
 | |
|       "description": "SAML role list",
 | |
|       "protocol": "saml",
 | |
|       "attributes": {
 | |
|         "consent.screen.text": "${samlRoleListScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "role list",
 | |
|           "protocol": "saml",
 | |
|           "protocolMapper": "saml-role-list-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "single": "false",
 | |
|             "attribute.nameformat": "Basic",
 | |
|             "attribute.name": "Role"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "phone",
 | |
|       "description": "OpenID Connect built-in scope: phone",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "consent.screen.text": "${phoneScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "phone number verified",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "phoneNumberVerified",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "phone_number_verified",
 | |
|             "jsonType.label": "boolean"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "phone number",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "phoneNumber",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "phone_number",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "email",
 | |
|       "description": "OpenID Connect built-in scope: email",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "consent.screen.text": "${emailScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "email",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "email",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "email",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "email verified",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-property-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "emailVerified",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "email_verified",
 | |
|             "jsonType.label": "boolean"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "organization",
 | |
|       "description": "Additional claims about the organization a subject belongs to",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "consent.screen.text": "${organizationScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "organization",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-organization-membership-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "organization",
 | |
|             "jsonType.label": "String",
 | |
|             "multivalued": "true"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "service_account",
 | |
|       "description": "Specific scope for a client enabled for service accounts",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "false",
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "Client IP Address",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usersessionmodel-note-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.session.note": "clientAddress",
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "clientAddress",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "Client ID",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usersessionmodel-note-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.session.note": "client_id",
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "client_id",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "Client Host",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usersessionmodel-note-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.session.note": "clientHost",
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "clientHost",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "saml_organization",
 | |
|       "description": "Organization Membership",
 | |
|       "protocol": "saml",
 | |
|       "attributes": {
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "organization",
 | |
|           "protocol": "saml",
 | |
|           "protocolMapper": "saml-organization-membership-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {}
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "offline_access",
 | |
|       "description": "OpenID Connect built-in scope: offline_access",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "consent.screen.text": "${offlineAccessScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "name": "address",
 | |
|       "description": "OpenID Connect built-in scope: address",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "consent.screen.text": "${addressScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "address",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-address-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.attribute.formatted": "formatted",
 | |
|             "user.attribute.country": "country",
 | |
|             "introspection.token.claim": "true",
 | |
|             "user.attribute.postal_code": "postal_code",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute.street": "street",
 | |
|             "id.token.claim": "true",
 | |
|             "user.attribute.region": "region",
 | |
|             "access.token.claim": "true",
 | |
|             "user.attribute.locality": "locality"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "basic",
 | |
|       "description": "OpenID Connect scope for add all basic claims to the token",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "false",
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "sub",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-sub-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "auth_time",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usersessionmodel-note-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.session.note": "AUTH_TIME",
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "auth_time",
 | |
|             "jsonType.label": "long"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {% include "scopes/rbac.json.j2" %},
 | |
|     {% include "scopes/nextcloud.json.j2" %},
 | |
|     {
 | |
|       "name": "web-origins",
 | |
|       "description": "OpenID Connect scope for add allowed web origins to the access token",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "false",
 | |
|         "consent.screen.text": "",
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "allowed web origins",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-allowed-origins-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "microprofile-jwt",
 | |
|       "description": "Microprofile - JWT built-in scope",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "groups",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-realm-role-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "multivalued": "true",
 | |
|             "user.attribute": "foo",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "groups",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "upn",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "username",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "upn",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "roles",
 | |
|       "description": "OpenID Connect scope for add user roles to the access token",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "false",
 | |
|         "consent.screen.text": "${rolesScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "client roles",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-desktop-role-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.attribute": "foo",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "resource_access.${client_id}.roles",
 | |
|             "jsonType.label": "String",
 | |
|             "multivalued": "true"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "realm roles",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-realm-role-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "user.attribute": "foo",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "realm_access.roles",
 | |
|             "jsonType.label": "String",
 | |
|             "multivalued": "true"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "audience resolve",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-audience-resolve-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "profile",
 | |
|       "description": "OpenID Connect built-in scope: profile",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "true",
 | |
|         "consent.screen.text": "${profileScopeConsentText}",
 | |
|         "display.on.consent.screen": "true"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "birthdate",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "birthdate",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "birthdate",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "nickname",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "nickname",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "nickname",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "given name",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "firstName",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "given_name",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "locale",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "locale",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "locale",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "updated at",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "updatedAt",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "updated_at",
 | |
|             "jsonType.label": "long"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "full name",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-full-name-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "userinfo.token.claim": "true"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "picture",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "picture",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "picture",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "username",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "username",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "{{ OIDC.ATTRIBUTES.USERNAME }}",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "family name",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "lastName",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "family_name",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "website",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "website",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "website",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "profile",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "profile",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "profile",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "zoneinfo",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "zoneinfo",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "zoneinfo",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "middle name",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "middleName",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "middle_name",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "name": "gender",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-usermodel-attribute-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "introspection.token.claim": "true",
 | |
|             "userinfo.token.claim": "true",
 | |
|             "user.attribute": "gender",
 | |
|             "id.token.claim": "true",
 | |
|             "access.token.claim": "true",
 | |
|             "claim.name": "gender",
 | |
|             "jsonType.label": "String"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "name": "acr",
 | |
|       "description": "OpenID Connect scope for add acr (authentication context class reference) to the token",
 | |
|       "protocol": "openid-connect",
 | |
|       "attributes": {
 | |
|         "include.in.token.scope": "false",
 | |
|         "display.on.consent.screen": "false"
 | |
|       },
 | |
|       "protocolMappers": [
 | |
|         {
 | |
|           "name": "acr loa level",
 | |
|           "protocol": "openid-connect",
 | |
|           "protocolMapper": "oidc-acr-mapper",
 | |
|           "consentRequired": false,
 | |
|           "config": {
 | |
|             "id.token.claim": "true",
 | |
|             "introspection.token.claim": "true",
 | |
|             "access.token.claim": "true"
 | |
|           }
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   ],
 | |
|   "defaultDefaultClientScopes": [
 | |
|     "role_list",
 | |
|     "saml_organization",
 | |
|     "profile",
 | |
|     "email",
 | |
|     "roles",
 | |
|     "web-origins",
 | |
|     "acr",
 | |
|     "basic"
 | |
|   ],
 | |
|   "defaultOptionalClientScopes": [
 | |
|     "offline_access",
 | |
|     "address",
 | |
|     "phone",
 | |
|     "microprofile-jwt",
 | |
|     "organization",
 | |
|     "{{ KEYCLOAK_RBAC_GROUP_CLAIM }}",
 | |
|     "{{ applications | get_app_conf(application_id, 'scopes.nextcloud', True) }}"
 | |
|   ],
 | |
|   "browserSecurityHeaders": {
 | |
|     "contentSecurityPolicyReportOnly": "",
 | |
|     "xContentTypeOptions": "nosniff",
 | |
|     "referrerPolicy": "strict-origin-when-cross-origin",
 | |
|     "xRobotsTag": "none",
 | |
|     "xFrameOptions": "SAMEORIGIN",
 | |
|     "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
 | |
|     "xXSSProtection": "1; mode=block",
 | |
|     "strictTransportSecurity": "max-age=31536000; includeSubDomains"
 | |
|   },
 | |
|   {%- include "smtp_server.json.j2" -%},
 | |
|   "eventsEnabled": false,
 | |
|   "eventsListeners": [
 | |
|     "jboss-logging"
 | |
|   ],
 | |
|   "enabledEventTypes": [],
 | |
|   "adminEventsEnabled": false,
 | |
|   "adminEventsDetailsEnabled": false,
 | |
|   "identityProviders": [],
 | |
|   "identityProviderMappers": [],
 | |
|   "components": {
 | |
|     "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [
 | |
|       {
 | |
|         "name": "Allowed Protocol Mapper Types",
 | |
|         "providerId": "allowed-protocol-mappers",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "allowed-protocol-mapper-types": [
 | |
|             "saml-user-property-mapper",
 | |
|             "saml-user-attribute-mapper",
 | |
|             "oidc-usermodel-attribute-mapper",
 | |
|             "oidc-address-mapper",
 | |
|             "oidc-usermodel-property-mapper",
 | |
|             "saml-role-list-mapper",
 | |
|             "oidc-full-name-mapper",
 | |
|             "oidc-sha256-pairwise-sub-mapper"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Trusted Hosts",
 | |
|         "providerId": "trusted-hosts",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "host-sending-registration-request-must-match": [
 | |
|             "true"
 | |
|           ],
 | |
|           "desktop-uris-must-match": [
 | |
|             "true"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Full Scope Disabled",
 | |
|         "providerId": "scope",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {}
 | |
|       },
 | |
|       {
 | |
|         "name": "Allowed Protocol Mapper Types",
 | |
|         "providerId": "allowed-protocol-mappers",
 | |
|         "subType": "authenticated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "allowed-protocol-mapper-types": [
 | |
|             "oidc-address-mapper",
 | |
|             "oidc-full-name-mapper",
 | |
|             "saml-user-attribute-mapper",
 | |
|             "saml-user-property-mapper",
 | |
|             "oidc-usermodel-attribute-mapper",
 | |
|             "oidc-usermodel-property-mapper",
 | |
|             "oidc-sha256-pairwise-sub-mapper",
 | |
|             "saml-role-list-mapper"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Allowed Client Scopes",
 | |
|         "providerId": "allowed-desktop-templates",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "allow-default-scopes": [
 | |
|             "true"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Allowed Client Scopes",
 | |
|         "providerId": "allowed-desktop-templates",
 | |
|         "subType": "authenticated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "allow-default-scopes": [
 | |
|             "true"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Max Clients Limit",
 | |
|         "providerId": "max-clients",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "max-clients": [
 | |
|             "200"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "Consent Required",
 | |
|         "providerId": "consent-required",
 | |
|         "subType": "anonymous",
 | |
|         "subComponents": {},
 | |
|         "config": {}
 | |
|       }
 | |
|     ],
 | |
|     {%- include "components/org.keycloak.userprofile.UserProfileProvider.json.j2" -%},
 | |
|     {%- include "components/org.keycloak.storage.UserStorageProvider.json.j2" -%},
 | |
|     "org.keycloak.keys.KeyProvider": [
 | |
|       {
 | |
|         "name": "rsa-enc-generated",
 | |
|         "providerId": "rsa-enc-generated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "priority": [
 | |
|             "100"
 | |
|           ],
 | |
|           "algorithm": [
 | |
|             "RSA-OAEP"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "hmac-generated-hs512",
 | |
|         "providerId": "hmac-generated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "priority": [
 | |
|             "100"
 | |
|           ],
 | |
|           "algorithm": [
 | |
|             "HS512"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "aes-generated",
 | |
|         "providerId": "aes-generated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "priority": [
 | |
|             "100"
 | |
|           ]
 | |
|         }
 | |
|       },
 | |
|       {
 | |
|         "name": "rsa-generated",
 | |
|         "providerId": "rsa-generated",
 | |
|         "subComponents": {},
 | |
|         "config": {
 | |
|           "priority": [
 | |
|             "100"
 | |
|           ]
 | |
|         }
 | |
|       }
 | |
|     ]
 | |
|   },
 | |
|   "internationalizationEnabled": false,
 | |
|   "supportedLocales": [],
 | |
|   "authenticationFlows": [
 | |
|     {
 | |
|       "alias": "Account verification options",
 | |
|       "description": "Method with which to verity the existing account",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "idp-email-verification",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Verify Existing Account by Re-authentication",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Browser - Conditional OTP",
 | |
|       "description": "Flow to determine if the OTP is required for the authentication",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "auth-otp-form",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Browser - Conditional Organization",
 | |
|       "description": "Flow to determine if the organization identity-first login is to be used",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "organization",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Direct Grant - Conditional OTP",
 | |
|       "description": "Flow to determine if the OTP is required for the authentication",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "direct-grant-validate-otp",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "First Broker Login - Conditional Organization",
 | |
|       "description": "Flow to determine if the authenticator that adds organization members is to be used",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "idp-add-organization-member",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "First broker login - Conditional OTP",
 | |
|       "description": "Flow to determine if the OTP is required for the authentication",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "auth-otp-form",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Handle Existing Account",
 | |
|       "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "idp-confirm-link",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Account verification options",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Organization",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Browser - Conditional Organization",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Reset - Conditional OTP",
 | |
|       "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "conditional-user-configured",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "reset-otp",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "User creation or linking",
 | |
|       "description": "Flow for the existing/non-existing user alternatives",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticatorConfig": "create unique user config",
 | |
|           "authenticator": "idp-create-user-if-unique",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Handle Existing Account",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "Verify Existing Account by Re-authentication",
 | |
|       "description": "Reauthentication of existing account",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "idp-username-password-form",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "First broker login - Conditional OTP",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "browser",
 | |
|       "description": "Browser based authentication",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "auth-cookie",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "auth-spnego",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "DISABLED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "identity-provider-redirector",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 25,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 26,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Organization",
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 30,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "forms",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "clients",
 | |
|       "description": "Base authentication for clients",
 | |
|       "providerId": "desktop-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "desktop-secret",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "desktop-jwt",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "desktop-secret-jwt",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 30,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "desktop-x509",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "ALTERNATIVE",
 | |
|           "priority": 40,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "direct grant",
 | |
|       "description": "OpenID Connect Resource Owner Grant",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "direct-grant-validate-username",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "direct-grant-validate-password",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 30,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Direct Grant - Conditional OTP",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "docker auth",
 | |
|       "description": "Used by Docker clients to authenticate against the IDP",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "web-app-http-basic-authenticator",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "first broker login",
 | |
|       "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticatorConfig": "review profile config",
 | |
|           "authenticator": "idp-review-profile",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "User creation or linking",
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 50,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "First Broker Login - Conditional Organization",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "forms",
 | |
|       "description": "Username, password, otp and other auth forms.",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "auth-username-password-form",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Browser - Conditional OTP",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "registration",
 | |
|       "description": "Registration flow",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "registration-page-form",
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "registration form",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "registration form",
 | |
|       "description": "Registration form",
 | |
|       "providerId": "form-flow",
 | |
|       "topLevel": false,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "registration-user-creation",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "registration-password-action",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 50,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
| {%- if applications | get_app_conf(application_id, 'features.recaptcha', False) %}
 | |
|         {
 | |
|           "authenticatorConfig": "Google reCaptcha",
 | |
|           "authenticator": "registration-recaptcha-action",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 60,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
| {%- else %}
 | |
|         {
 | |
|           "authenticator": "registration-recaptcha-action",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "DISABLED",
 | |
|           "priority": 60,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
| {%- endif %}
 | |
|         {
 | |
|           "authenticator": "registration-terms-and-conditions",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "DISABLED",
 | |
|           "priority": 70,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "reset credentials",
 | |
|       "description": "Reset credentials for a user if they forgot their password or something",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "reset-credentials-choose-user",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "reset-credential-email",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 20,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticator": "reset-password",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 30,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         },
 | |
|         {
 | |
|           "authenticatorFlow": true,
 | |
|           "requirement": "CONDITIONAL",
 | |
|           "priority": 40,
 | |
|           "autheticatorFlow": true,
 | |
|           "flowAlias": "Reset - Conditional OTP",
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     },
 | |
|     {
 | |
|       "alias": "saml ecp",
 | |
|       "description": "SAML ECP Profile Authentication Flow",
 | |
|       "providerId": "basic-flow",
 | |
|       "topLevel": true,
 | |
|       "builtIn": true,
 | |
|       "authenticationExecutions": [
 | |
|         {
 | |
|           "authenticator": "http-basic-authenticator",
 | |
|           "authenticatorFlow": false,
 | |
|           "requirement": "REQUIRED",
 | |
|           "priority": 10,
 | |
|           "autheticatorFlow": false,
 | |
|           "userSetupAllowed": false
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   ],
 | |
|   "authenticatorConfig": [
 | |
| {%- if applications | get_app_conf(application_id, 'features.recaptcha', False) %}
 | |
|     {
 | |
|       "alias": "Google reCaptcha",
 | |
|       "config": {
 | |
|         "action": "register",
 | |
|         "useRecaptchaNet": "false",
 | |
|         "recaptcha.v3": "true",
 | |
|         "secret.key": "{{ applications | get_app_conf(application_id, 'credentials.recaptcha.secret_key', True) }}",
 | |
|         "site.key": "{{ applications | get_app_conf(application_id, 'credentials.recaptcha.website_key', True) }}"
 | |
|       }
 | |
|     },
 | |
| {%- endif %}
 | |
|     {
 | |
|       "alias": "create unique user config",
 | |
|       "config": {
 | |
|         "require.password.update.after.registration": "false"
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "alias": "review profile config",
 | |
|       "config": {
 | |
|         "update.profile.on.first.login": "missing"
 | |
|       }
 | |
|     }
 | |
|   ],
 | |
|   "requiredActions": [
 | |
|     {
 | |
|       "alias": "CONFIGURE_TOTP",
 | |
|       "name": "Configure OTP",
 | |
|       "providerId": "CONFIGURE_TOTP",
 | |
|       "enabled": true,
 | |
|       "defaultAction": true,
 | |
|       "priority": 10,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "TERMS_AND_CONDITIONS",
 | |
|       "name": "Terms and Conditions",
 | |
|       "providerId": "TERMS_AND_CONDITIONS",
 | |
|       "enabled": false,
 | |
|       "defaultAction": false,
 | |
|       "priority": 20,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "UPDATE_PASSWORD",
 | |
|       "name": "Update Password",
 | |
|       "providerId": "UPDATE_PASSWORD",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 30,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "UPDATE_PROFILE",
 | |
|       "name": "Update Profile",
 | |
|       "providerId": "UPDATE_PROFILE",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 40,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "VERIFY_EMAIL",
 | |
|       "name": "Verify Email",
 | |
|       "providerId": "VERIFY_EMAIL",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 50,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "delete_account",
 | |
|       "name": "Delete Account",
 | |
|       "providerId": "delete_account",
 | |
|       "enabled": false,
 | |
|       "defaultAction": false,
 | |
|       "priority": 60,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "webauthn-register",
 | |
|       "name": "Webauthn Register",
 | |
|       "providerId": "webauthn-register",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 70,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "webauthn-register-passwordless",
 | |
|       "name": "Webauthn Register Passwordless",
 | |
|       "providerId": "webauthn-register-passwordless",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 80,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "VERIFY_PROFILE",
 | |
|       "name": "Verify Profile",
 | |
|       "providerId": "VERIFY_PROFILE",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 90,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "delete_credential",
 | |
|       "name": "Delete Credential",
 | |
|       "providerId": "delete_credential",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 100,
 | |
|       "config": {}
 | |
|     },
 | |
|     {
 | |
|       "alias": "update_user_locale",
 | |
|       "name": "Update User Locale",
 | |
|       "providerId": "update_user_locale",
 | |
|       "enabled": true,
 | |
|       "defaultAction": false,
 | |
|       "priority": 1000,
 | |
|       "config": {}
 | |
|     }
 | |
|   ],
 | |
|   "browserFlow": "browser",
 | |
|   "registrationFlow": "registration",
 | |
|   "directGrantFlow": "direct grant",
 | |
|   "resetCredentialsFlow": "reset credentials",
 | |
|   "clientAuthenticationFlow": "clients",
 | |
|   "dockerAuthenticationFlow": "docker auth",
 | |
|   "firstBrokerLoginFlow": "first broker login",
 | |
|   "attributes": {
 | |
|     "cibaBackchannelTokenDeliveryMode": "poll",
 | |
|     "cibaAuthRequestedUserHint": "login_hint",
 | |
|     "oauth2DevicePollingInterval": "5",
 | |
|     "clientOfflineSessionMaxLifespan": "0",
 | |
|     "clientSessionIdleTimeout": "0",
 | |
|     "clientOfflineSessionIdleTimeout": "0",
 | |
|     "cibaInterval": "5",
 | |
|     "realmReusableOtpCode": "false",
 | |
|     "cibaExpiresIn": "120",
 | |
|     "oauth2DeviceCodeLifespan": "600",
 | |
|     "parRequestUriLifespan": "60",
 | |
|     "clientSessionMaxLifespan": "0",
 | |
|     "frontendUrl": "",
 | |
|     "acr.loa.map": "{}"
 | |
|   },
 | |
|   "keycloakVersion": "26.1.2",
 | |
|   "userManagedAccessAllowed": true,
 | |
|   "organizationsEnabled": false,
 | |
|   "verifiableCredentialsEnabled": false,
 | |
|   "adminPermissionsEnabled": false,
 | |
|   "clientProfiles": {
 | |
|     "profiles": []
 | |
|   },
 | |
|   "clientPolicies": {
 | |
|     "policies": []
 | |
|   }
 | |
| } |