diff --git a/assets/keycloak/data/import/genaistudio-realm.json b/assets/keycloak/data/import/genaistudio-realm.json
new file mode 100644
index 0000000..d3e13bc
--- /dev/null
+++ b/assets/keycloak/data/import/genaistudio-realm.json
@@ -0,0 +1,1941 @@
+{
+ "id" : "f0f6258f-3d8e-4e5d-badd-8a7c0e653174",
+ "realm" : "genaistudio",
+ "displayName" : "GenAI Studio",
+ "displayNameHtml" : "GenAI Studio",
+ "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" : true,
+ "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" : [ {
+ "id" : "7caf3bfc-c7c3-4b0e-b5ec-b9bc8a654e84",
+ "name" : "offline_access",
+ "description" : "${role_offline-access}",
+ "composite" : false,
+ "clientRole" : false,
+ "containerId" : "f0f6258f-3d8e-4e5d-badd-8a7c0e653174",
+ "attributes" : { }
+ }, {
+ "id" : "0bb42ee8-c34e-409c-adac-225aa09e291c",
+ "name" : "default-roles-genaistudio",
+ "description" : "${role_default-roles}",
+ "composite" : true,
+ "composites" : {
+ "realm" : [ "offline_access", "uma_authorization" ],
+ "client" : {
+ "account" : [ "view-profile", "manage-account" ]
+ }
+ },
+ "clientRole" : false,
+ "containerId" : "f0f6258f-3d8e-4e5d-badd-8a7c0e653174",
+ "attributes" : { }
+ }, {
+ "id" : "54bcc73e-26cf-4b63-8e90-70955aa31c54",
+ "name" : "uma_authorization",
+ "description" : "${role_uma_authorization}",
+ "composite" : false,
+ "clientRole" : false,
+ "containerId" : "f0f6258f-3d8e-4e5d-badd-8a7c0e653174",
+ "attributes" : { }
+ } ],
+ "client" : {
+ "genaistudio" : [ {
+ "id" : "c297e886-fd41-4872-9225-a2a7cc245006",
+ "name" : "user",
+ "description" : "",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "e633b3fa-4e80-4f6f-9729-bcc81730b065",
+ "attributes" : { }
+ }, {
+ "id" : "76be62ca-d269-47a9-87f2-d30a323c4e9c",
+ "name" : "admin",
+ "description" : "",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "e633b3fa-4e80-4f6f-9729-bcc81730b065",
+ "attributes" : { }
+ }, {
+ "id" : "b808e2c7-22d8-43a0-907c-97bd53fc5c62",
+ "name" : "unauthorized_user",
+ "description" : "",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "e633b3fa-4e80-4f6f-9729-bcc81730b065",
+ "attributes" : { }
+ } ],
+ "realm-management" : [ {
+ "id" : "5057426f-734c-4449-8bce-8bcabcb9c89e",
+ "name" : "query-users",
+ "description" : "${role_query-users}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "c83297ad-c816-4e71-a13b-e76aa6966fd8",
+ "name" : "manage-clients",
+ "description" : "${role_manage-clients}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "01646fa8-0b26-4643-8081-6678cda82ca0",
+ "name" : "impersonation",
+ "description" : "${role_impersonation}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "d438b592-4548-4438-9895-c5ca3b3cd7e0",
+ "name" : "manage-events",
+ "description" : "${role_manage-events}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "548a04e5-c6d2-48c0-ad37-4067dd8f838c",
+ "name" : "view-users",
+ "description" : "${role_view-users}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "query-users", "query-groups" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "5d780758-b78f-4b25-ae9b-c5ad18789a0e",
+ "name" : "query-clients",
+ "description" : "${role_query-clients}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "c83ff668-2c8a-4ad0-b58d-401e32e1de91",
+ "name" : "create-client",
+ "description" : "${role_create-client}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "a7c1c0d0-f6ac-4aa7-a0a6-5d92ffe44851",
+ "name" : "view-identity-providers",
+ "description" : "${role_view-identity-providers}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "d105c5d8-172c-49ff-a727-df58e25bf2b7",
+ "name" : "query-groups",
+ "description" : "${role_query-groups}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "adaa7c93-3f3c-4910-bdac-37510e5257c2",
+ "name" : "query-realms",
+ "description" : "${role_query-realms}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "c52b4bad-7b37-4240-a2d7-19d1d278612b",
+ "name" : "view-authorization",
+ "description" : "${role_view-authorization}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "09fad556-0209-41ac-984d-2924ff80bd7d",
+ "name" : "manage-authorization",
+ "description" : "${role_manage-authorization}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "9364420d-1dc7-4bcf-af45-df729c2c09d1",
+ "name" : "view-clients",
+ "description" : "${role_view-clients}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "query-clients" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "0e477d3c-7c27-45c6-88f7-89d8a3a653e3",
+ "name" : "view-realm",
+ "description" : "${role_view-realm}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "946cb9e9-9cd7-479d-9bd6-72164beb1376",
+ "name" : "manage-realm",
+ "description" : "${role_manage-realm}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "5fe1ef93-bcff-4a53-af72-3664ffba72a7",
+ "name" : "realm-admin",
+ "description" : "${role_realm-admin}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "realm-management" : [ "query-users", "manage-clients", "impersonation", "view-users", "manage-events", "query-clients", "create-client", "view-identity-providers", "query-groups", "query-realms", "view-authorization", "manage-authorization", "view-clients", "view-realm", "manage-realm", "manage-users", "manage-identity-providers", "view-events" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "8a63f0ee-7b5c-48dd-aaa7-e5ccf036ab2a",
+ "name" : "manage-users",
+ "description" : "${role_manage-users}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "60a45e8b-a1fc-46ee-b843-ca2c418e6a59",
+ "name" : "manage-identity-providers",
+ "description" : "${role_manage-identity-providers}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ }, {
+ "id" : "952fb1d1-5672-4ac7-b0f7-e42ad3bc35db",
+ "name" : "view-events",
+ "description" : "${role_view-events}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "attributes" : { }
+ } ],
+ "security-admin-console" : [ ],
+ "admin-cli" : [ ],
+ "account-console" : [ ],
+ "broker" : [ {
+ "id" : "27b319ce-fbe7-4041-a2b2-b826402c04ae",
+ "name" : "read-token",
+ "description" : "${role_read-token}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "bc31d6e1-b2f8-4671-85c0-c9b9380d406f",
+ "attributes" : { }
+ } ],
+ "account" : [ {
+ "id" : "a5da1d90-cd1e-4a20-9218-f065e593bf5a",
+ "name" : "view-applications",
+ "description" : "${role_view-applications}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "1a389fca-5265-48d4-93d7-1c12a5d982a6",
+ "name" : "view-profile",
+ "description" : "${role_view-profile}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "be62e167-b3f7-4f0e-ac70-31d890275fec",
+ "name" : "manage-account-links",
+ "description" : "${role_manage-account-links}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "4e872665-87d4-49be-82ae-14c78c0692cb",
+ "name" : "view-groups",
+ "description" : "${role_view-groups}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "7da07fdc-da2f-461f-966a-1317d9a5edc9",
+ "name" : "manage-account",
+ "description" : "${role_manage-account}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "account" : [ "manage-account-links" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "591c18fd-10e4-4145-b5be-e25d414cfe15",
+ "name" : "delete-account",
+ "description" : "${role_delete-account}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "f862b279-0431-4fa5-9a4c-8aa131fbffe6",
+ "name" : "view-consent",
+ "description" : "${role_view-consent}",
+ "composite" : false,
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ }, {
+ "id" : "b78bacd6-a1d5-4831-8317-aa7965c11a40",
+ "name" : "manage-consent",
+ "description" : "${role_manage-consent}",
+ "composite" : true,
+ "composites" : {
+ "client" : {
+ "account" : [ "view-consent" ]
+ }
+ },
+ "clientRole" : true,
+ "containerId" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "attributes" : { }
+ } ]
+ }
+ },
+ "groups" : [ {
+ "id" : "ae716f5a-1116-4944-bc46-2cbbc67b4683",
+ "name" : "admin",
+ "path" : "/admin",
+ "subGroups" : [ ],
+ "attributes" : { },
+ "realmRoles" : [ ],
+ "clientRoles" : {
+ "genaistudio" : [ "admin" ]
+ }
+ }, {
+ "id" : "3230ec0a-8338-4275-b890-bc7290e9b631",
+ "name" : "unauthorized_user",
+ "path" : "/unauthorized_user",
+ "subGroups" : [ ],
+ "attributes" : { },
+ "realmRoles" : [ ],
+ "clientRoles" : {
+ "genaistudio" : [ "unauthorized_user" ]
+ }
+ }, {
+ "id" : "b39c9159-f2d5-459d-af95-339529c27a8a",
+ "name" : "user",
+ "path" : "/user",
+ "subGroups" : [ ],
+ "attributes" : { },
+ "realmRoles" : [ ],
+ "clientRoles" : {
+ "genaistudio" : [ "user" ]
+ }
+ } ],
+ "defaultRole" : {
+ "id" : "0bb42ee8-c34e-409c-adac-225aa09e291c",
+ "name" : "default-roles-genaistudio",
+ "description" : "${role_default-roles}",
+ "composite" : true,
+ "clientRole" : false,
+ "containerId" : "f0f6258f-3d8e-4e5d-badd-8a7c0e653174"
+ },
+ "defaultGroups" : [ "/unauthorized_user" ],
+ "requiredCredentials" : [ "password" ],
+ "otpPolicyType" : "totp",
+ "otpPolicyAlgorithm" : "HmacSHA1",
+ "otpPolicyInitialCounter" : 0,
+ "otpPolicyDigits" : 6,
+ "otpPolicyLookAheadWindow" : 1,
+ "otpPolicyPeriod" : 30,
+ "otpPolicyCodeReusable" : false,
+ "otpSupportedApplications" : [ "totpAppFreeOTPName", "totpAppGoogleName", "totpAppMicrosoftAuthenticatorName" ],
+ "localizationTexts" : { },
+ "webAuthnPolicyRpEntityName" : "keycloak",
+ "webAuthnPolicySignatureAlgorithms" : [ "ES256" ],
+ "webAuthnPolicyRpId" : "",
+ "webAuthnPolicyAttestationConveyancePreference" : "not specified",
+ "webAuthnPolicyAuthenticatorAttachment" : "not specified",
+ "webAuthnPolicyRequireResidentKey" : "not specified",
+ "webAuthnPolicyUserVerificationRequirement" : "not specified",
+ "webAuthnPolicyCreateTimeout" : 0,
+ "webAuthnPolicyAvoidSameAuthenticatorRegister" : false,
+ "webAuthnPolicyAcceptableAaguids" : [ ],
+ "webAuthnPolicyExtraOrigins" : [ ],
+ "webAuthnPolicyPasswordlessRpEntityName" : "keycloak",
+ "webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ],
+ "webAuthnPolicyPasswordlessRpId" : "",
+ "webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified",
+ "webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified",
+ "webAuthnPolicyPasswordlessRequireResidentKey" : "not specified",
+ "webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified",
+ "webAuthnPolicyPasswordlessCreateTimeout" : 0,
+ "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false,
+ "webAuthnPolicyPasswordlessAcceptableAaguids" : [ ],
+ "webAuthnPolicyPasswordlessExtraOrigins" : [ ],
+ "scopeMappings" : [ {
+ "clientScope" : "offline_access",
+ "roles" : [ "offline_access" ]
+ } ],
+ "clientScopeMappings" : {
+ "account" : [ {
+ "client" : "account-console",
+ "roles" : [ "manage-account", "view-groups" ]
+ } ]
+ },
+ "clients" : [ {
+ "id" : "42fc0ffe-9fb7-407e-bbc6-955089084958",
+ "clientId" : "account",
+ "name" : "${client_account}",
+ "rootUrl" : "${authBaseUrl}",
+ "baseUrl" : "/realms/genaistudio/account/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "redirectUris" : [ "/realms/genaistudio/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",
+ "post.logout.redirect.uris" : "+"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "basic", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "afe0f5f0-4fe5-480d-a5b8-e454f3de8492",
+ "clientId" : "account-console",
+ "name" : "${client_account-console}",
+ "rootUrl" : "${authBaseUrl}",
+ "baseUrl" : "/realms/genaistudio/account/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "redirectUris" : [ "/realms/genaistudio/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",
+ "post.logout.redirect.uris" : "+",
+ "pkce.code.challenge.method" : "S256"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "protocolMappers" : [ {
+ "id" : "85ac6f06-a0fe-4bb7-af51-f534eb607ecf",
+ "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", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "f278e305-b2c8-4571-9492-894ca8bfa79a",
+ "clientId" : "admin-cli",
+ "name" : "${client_admin-cli}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-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",
+ "post.logout.redirect.uris" : "+"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : true,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "basic", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "bc31d6e1-b2f8-4671-85c0-c9b9380d406f",
+ "clientId" : "broker",
+ "name" : "${client_broker}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-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",
+ "post.logout.redirect.uris" : "+"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "basic", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "e633b3fa-4e80-4f6f-9729-bcc81730b065",
+ "clientId" : "genaistudio",
+ "name" : "GenAI Studio",
+ "description" : "",
+ "rootUrl" : "",
+ "adminUrl" : "",
+ "baseUrl" : "",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "redirectUris" : [ "", "*" ],
+ "webOrigins" : [ "", "*" ],
+ "notBefore" : 0,
+ "bearerOnly" : false,
+ "consentRequired" : false,
+ "standardFlowEnabled" : true,
+ "implicitFlowEnabled" : false,
+ "directAccessGrantsEnabled" : true,
+ "serviceAccountsEnabled" : false,
+ "publicClient" : true,
+ "frontchannelLogout" : true,
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "realm_client" : "false",
+ "oidc.ciba.grant.enabled" : "false",
+ "backchannel.logout.session.required" : "true",
+ "login_theme" : "opea",
+ "post.logout.redirect.uris" : "+",
+ "oauth2.device.authorization.grant.enabled" : "false",
+ "display.on.consent.screen" : "false",
+ "backchannel.logout.revoke.offline.tokens" : "false"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : true,
+ "nodeReRegistrationTimeout" : -1,
+ "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "basic", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "ba4ab4d4-f111-47e2-bbb5-a34b85649481",
+ "clientId" : "realm-management",
+ "name" : "${client_realm-management}",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-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",
+ "post.logout.redirect.uris" : "+"
+ },
+ "authenticationFlowBindingOverrides" : { },
+ "fullScopeAllowed" : false,
+ "nodeReRegistrationTimeout" : 0,
+ "defaultClientScopes" : [ "web-origins", "acr", "roles", "profile", "basic", "email" ],
+ "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
+ }, {
+ "id" : "1bac263b-bf38-46d0-877d-72f1f0867db7",
+ "clientId" : "security-admin-console",
+ "name" : "${client_security-admin-console}",
+ "rootUrl" : "${authAdminUrl}",
+ "baseUrl" : "/admin/genaistudio/console/",
+ "surrogateAuthRequired" : false,
+ "enabled" : true,
+ "alwaysDisplayInConsole" : false,
+ "clientAuthenticatorType" : "client-secret",
+ "redirectUris" : [ "/admin/genaistudio/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" : [ {
+ "id" : "ea29252d-4bf8-4dbb-9e73-70ae0b920be5",
+ "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", "offline_access", "microprofile-jwt" ]
+ } ],
+ "clientScopes" : [ {
+ "id" : "d28d60d4-33c5-4342-90e1-4371fe4a4d63",
+ "name" : "offline_access",
+ "description" : "OpenID Connect built-in scope: offline_access",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "consent.screen.text" : "${offlineAccessScopeConsentText}",
+ "display.on.consent.screen" : "true"
+ }
+ }, {
+ "id" : "865b1897-98e2-4607-807a-f2fff6c6b267",
+ "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" : [ {
+ "id" : "898a0546-0826-4625-8741-872004030ad6",
+ "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"
+ }
+ }, {
+ "id" : "81bda91e-8d1d-4152-957d-f7b5d236a3a9",
+ "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"
+ }
+ } ]
+ }, {
+ "id" : "e1aed2bc-91d7-40eb-a3fa-195463826bc7",
+ "name" : "microprofile-jwt",
+ "description" : "Microprofile - JWT built-in scope",
+ "protocol" : "openid-connect",
+ "attributes" : {
+ "include.in.token.scope" : "true",
+ "display.on.consent.screen" : "false"
+ },
+ "protocolMappers" : [ {
+ "id" : "227f6fce-c7b2-45e5-accd-0a098b8cf12a",
+ "name" : "groups",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-realm-role-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "introspection.token.claim" : "true",
+ "multivalued" : "true",
+ "userinfo.token.claim" : "true",
+ "user.attribute" : "foo",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "groups",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "c09534ae-c78d-4339-aff4-2dbd5bbed6e7",
+ "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"
+ }
+ } ]
+ }, {
+ "id" : "ec9c2a4b-b9e3-4e22-8390-bb1052251469",
+ "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" : [ {
+ "id" : "6df40c79-f290-4f94-85f5-c116b32f96f9",
+ "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"
+ }
+ }, {
+ "id" : "a3f50ef6-9688-45fb-a6e6-b8d2e8120484",
+ "name" : "audience resolve",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-audience-resolve-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "introspection.token.claim" : "true",
+ "access.token.claim" : "true"
+ }
+ }, {
+ "id" : "d1d085f2-1799-4a7c-94b5-5d4d31f10df1",
+ "name" : "client roles",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usermodel-client-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"
+ }
+ } ]
+ }, {
+ "id" : "89d77d5b-49b5-413a-99df-031c800738b1",
+ "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" : [ {
+ "id" : "64b38a11-7da2-4276-9eeb-3db7170d445c",
+ "name" : "allowed web origins",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-allowed-origins-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "introspection.token.claim" : "true",
+ "access.token.claim" : "true"
+ }
+ } ]
+ }, {
+ "id" : "60a52fb4-3dc2-4da7-9497-7058ec74e237",
+ "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" : [ {
+ "id" : "049fd210-e3be-49b5-b6a9-ca0318c4a5e1",
+ "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"
+ }
+ }, {
+ "id" : "b4f4144f-45e4-4c50-9fb6-43ee7da41259",
+ "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"
+ }
+ } ]
+ }, {
+ "id" : "4683d831-547f-4105-96d4-87b5411459ef",
+ "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" : [ {
+ "id" : "fae5fa55-e4f6-4395-8148-ec38cf188df0",
+ "name" : "auth_time",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-usersessionmodel-note-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "user.session.note" : "AUTH_TIME",
+ "introspection.token.claim" : "true",
+ "userinfo.token.claim" : "true",
+ "id.token.claim" : "true",
+ "access.token.claim" : "true",
+ "claim.name" : "auth_time",
+ "jsonType.label" : "long"
+ }
+ }, {
+ "id" : "9fe81269-9c24-441b-ac98-b9df588c6e45",
+ "name" : "sub",
+ "protocol" : "openid-connect",
+ "protocolMapper" : "oidc-sub-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "introspection.token.claim" : "true",
+ "access.token.claim" : "true"
+ }
+ } ]
+ }, {
+ "id" : "39bd4d60-c7f0-4055-b59a-88ac67b3dda9",
+ "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" : [ {
+ "id" : "5ed47a69-03a2-4d49-8b39-cd203557bec0",
+ "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"
+ }
+ } ]
+ }, {
+ "id" : "522bb0a5-4405-42fa-b801-6582cbde8674",
+ "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" : [ {
+ "id" : "feb2efa1-7a1e-490c-8581-d4627c0acd41",
+ "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",
+ "userinfo.token.claim" : "true"
+ }
+ } ]
+ }, {
+ "id" : "9592d39a-6f04-4944-9edc-e8c6777d59c1",
+ "name" : "role_list",
+ "description" : "SAML role list",
+ "protocol" : "saml",
+ "attributes" : {
+ "consent.screen.text" : "${samlRoleListScopeConsentText}",
+ "display.on.consent.screen" : "true"
+ },
+ "protocolMappers" : [ {
+ "id" : "7fe17268-14e4-4579-b266-3d15cb5d50d1",
+ "name" : "role list",
+ "protocol" : "saml",
+ "protocolMapper" : "saml-role-list-mapper",
+ "consentRequired" : false,
+ "config" : {
+ "single" : "false",
+ "attribute.nameformat" : "Basic",
+ "attribute.name" : "Role"
+ }
+ } ]
+ }, {
+ "id" : "135bcdc0-d9c4-43cd-a7e6-c60886ad6160",
+ "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" : [ {
+ "id" : "3d22f534-a1e1-4847-ba81-94e5eef2d177",
+ "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"
+ }
+ }, {
+ "id" : "167bbdb0-0b0f-47f7-a58d-fbcac353352e",
+ "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"
+ }
+ }, {
+ "id" : "e76bc6b8-f064-4a34-8d48-27b99f1fc5a2",
+ "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"
+ }
+ }, {
+ "id" : "50a25e72-c48e-4339-8331-dece5d0a6f47",
+ "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"
+ }
+ }, {
+ "id" : "1c2171a4-8b2d-4da6-8c7c-d39cf2cfd7f3",
+ "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"
+ }
+ }, {
+ "id" : "dda46b19-095d-47e7-9847-ebf6afc77fae",
+ "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" : "preferred_username",
+ "jsonType.label" : "String"
+ }
+ }, {
+ "id" : "f030218a-527c-4c7a-adff-e2b577275684",
+ "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"
+ }
+ }, {
+ "id" : "2a795a1f-7285-433f-ad04-d4cdc0fb0c05",
+ "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"
+ }
+ }, {
+ "id" : "9800bad3-8f13-4d0b-ae69-138684ed802d",
+ "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"
+ }
+ }, {
+ "id" : "3557073b-ec30-42cb-8c1a-a50f00491e6b",
+ "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"
+ }
+ }, {
+ "id" : "ed1d6f02-96d2-4b27-a9a3-c8e382ae3e85",
+ "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"
+ }
+ }, {
+ "id" : "8689c904-5d56-40aa-a55b-1780d54ed226",
+ "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"
+ }
+ }, {
+ "id" : "40f61f77-c590-4a5e-9425-482d2e24ab13",
+ "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"
+ }
+ }, {
+ "id" : "6e9a49f5-2e6b-431f-bcc9-7b561be80c7a",
+ "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"
+ }
+ } ]
+ } ],
+ "defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins", "acr", "basic" ],
+ "defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ],
+ "browserSecurityHeaders" : {
+ "contentSecurityPolicyReportOnly" : "",
+ "xContentTypeOptions" : "nosniff",
+ "referrerPolicy" : "no-referrer",
+ "xRobotsTag" : "none",
+ "xFrameOptions" : "SAMEORIGIN",
+ "contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "xXSSProtection" : "1; mode=block",
+ "strictTransportSecurity" : "max-age=31536000; includeSubDomains"
+ },
+ "smtpServer" : { },
+ "loginTheme" : "opea",
+ "accountTheme" : "",
+ "adminTheme" : "opea",
+ "emailTheme" : "",
+ "eventsEnabled" : false,
+ "eventsListeners" : [ "jboss-logging" ],
+ "enabledEventTypes" : [ ],
+ "adminEventsEnabled" : false,
+ "adminEventsDetailsEnabled" : false,
+ "identityProviders" : [ ],
+ "identityProviderMappers" : [ ],
+ "components" : {
+ "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ {
+ "id" : "4beef511-1333-480e-8ed0-537507457969",
+ "name" : "Trusted Hosts",
+ "providerId" : "trusted-hosts",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "host-sending-registration-request-must-match" : [ "true" ],
+ "client-uris-must-match" : [ "true" ]
+ }
+ }, {
+ "id" : "b0d629f5-511e-4175-93d5-b07ddef2b171",
+ "name" : "Full Scope Disabled",
+ "providerId" : "scope",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : { }
+ }, {
+ "id" : "ef914206-6789-43d6-8041-740c3e4f208c",
+ "name" : "Consent Required",
+ "providerId" : "consent-required",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : { }
+ }, {
+ "id" : "d6ad3846-1295-49d2-908c-195c63cdd550",
+ "name" : "Allowed Client Scopes",
+ "providerId" : "allowed-client-templates",
+ "subType" : "authenticated",
+ "subComponents" : { },
+ "config" : {
+ "allow-default-scopes" : [ "true" ]
+ }
+ }, {
+ "id" : "403ddaa6-3a78-4582-906f-d6da4ca44963",
+ "name" : "Allowed Protocol Mapper Types",
+ "providerId" : "allowed-protocol-mappers",
+ "subType" : "authenticated",
+ "subComponents" : { },
+ "config" : {
+ "allowed-protocol-mapper-types" : [ "oidc-usermodel-property-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-address-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper" ]
+ }
+ }, {
+ "id" : "ac406d17-51a7-47b2-b201-9edcb67668c6",
+ "name" : "Max Clients Limit",
+ "providerId" : "max-clients",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "max-clients" : [ "200" ]
+ }
+ }, {
+ "id" : "144680b9-9c1c-4667-b264-75e12de128fe",
+ "name" : "Allowed Protocol Mapper Types",
+ "providerId" : "allowed-protocol-mappers",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper", "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper" ]
+ }
+ }, {
+ "id" : "b0cce162-c1ff-43c6-bc07-6c7d0bf5ac90",
+ "name" : "Allowed Client Scopes",
+ "providerId" : "allowed-client-templates",
+ "subType" : "anonymous",
+ "subComponents" : { },
+ "config" : {
+ "allow-default-scopes" : [ "true" ]
+ }
+ } ],
+ "org.keycloak.keys.KeyProvider" : [ {
+ "id" : "27822c88-0dea-4fed-ae00-9989103439e1",
+ "name" : "aes-generated",
+ "providerId" : "aes-generated",
+ "subComponents" : { },
+ "config" : {
+ "kid" : [ "68040a81-9c69-4b83-a8fd-a6bceec66bb2" ],
+ "secret" : [ "Tz_DHdQ2ydeeD_8UW4i72Q" ],
+ "priority" : [ "100" ]
+ }
+ }, {
+ "id" : "aad34e8e-bff1-4cb6-9812-41eaabacc3cf",
+ "name" : "rsa-enc-generated",
+ "providerId" : "rsa-enc-generated",
+ "subComponents" : { },
+ "config" : {
+ "privateKey" : [ "MIIEpAIBAAKCAQEAvc2DtuEdbs72kognmXqhZ6RD5KnRnWCsQYxDKLQNbvC6i3O1eBVhDMG8i/0VKZJVtF4mffsE1/kaY+vWTbUim9oLmRlUM3MzZ7ZD2SIaXhS0Pr3qH1ipjrlAlxaz6lx0ygqzW5+XgwR6eN2aqSBSWY803CoJEN/E5L8yNLap/lRLliTPsuUsgwOENswkMD7P3Oqa2lU0nJuy6S7Vu+rq6UwfGudJLMpyKntYvYTz+mfattgEaFMom9iPANCRxq629loTxIjFGho1eN7OHFNx8pPAPYj0Kvig90Q+odzx6xReHVHT5TqzTGpJHWzameUcr//GTbQVxkFyMQudG5lg1wIDAQABAoIBACRn15RL8KPQ8c2gbQwM0Am7ocQp6IlpwhCekUEs7Ai0Buv5qTybyS4zuPEW/aioJ2U9y99NNxwf7TZuRYBJNpazR5c5mwN1XM5PUQtEdc9G5F3GerJBhOBZ2zA/zAmvaz1XuRhhb6PTR5SIWQKIrxL7m3WBYJTKfw8rNzuSL+AWwMOCowCni9ZQ7Y50zzdxZaO9dd00DgrT75ANQcjs7jC0ovi+Sa9YmwozIBsx7WyHs9nazqsTPezZy2DI662P134iHDeL42R9Lz2lKhQeTYia0Ac792rO0QeX4dTR16WWxs33hQJe9L84MtGEKgJBmZnJ3y18hGoZMGJVqnvq0YUCgYEA/HTPG39cY7KYbaaf0B8urP/bvZJCIOb3slGpr00tJ4g3hQ6UGvW355wXUoAo1keGk1BhJZedc/5rHN/1+5cs15zRLZj1Qq0nouQPYl7Gatml+OHjlEsWNisAtFIqsvYr8+9Ckic+/HVE/1+/uGH9pxGfgR1E4tE+mdWLSGuFXYsCgYEAwHeQFJAvPTQmtGAAjMx9xS5aigPsmiw6L/DqpKROsHpD96tM0/wRlh4NoRRam0gATCTn3arC3ITALK58wUnrpdwFtb0dESrXOkqsQYHvMd21ytGxUMngCasPbWtUBvwG7IWkuixxyfWvLf0yDnIIwmXC80NcG9cc7E36Ulqzi2UCgYB90GTqykUr9nSaqOCaYv/q/bPwPPSx2wl0l9gd4jNvsSYiLIrJCM43IgZJek9fwtOhlPxlNLMmfJO7Fy5KzSNu7Nseg00vhoXrWwcDukHePEvHxiOZ4vXV1waJ1y0qdR6gegvONLriLDtPndM5O7Siz1iTixeqhidRmSfJ1rPnUwKBgQCsOJCJhfdvScI0dw8m7jjAf1ju1NIbpuWuTmJ4TrpG+jDlZrgJnC3UaTIC6Canekch24hK9ukE0BjyInRptQ6SzI2jcQSYfwA2HemDeJQjx+NLCFYlF29M12+nlnmLAmvjqzaajPiJIjnN6hmniWzDHrHSYX0DQHqWDLSoipbMbQKBgQCY3tKzhK6Felr+C5lX4VEdpyQ1CWuX4FHjUMy2XkMgYiOJq9ijU2EoY7W07zwpzSCi9HfzTmN75QuSC6cAfAsazGbmdIFUNyvk8a5r4VNjbb61hvDj/jzOUHe6Vk/z/JB5xrVJRKEfe01vVvz7XrHjeXIojEgDgs8bWSGSlQXz4w==" ],
+ "certificate" : [ "MIICpTCCAY0CBgGT2Sq1UjANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtnZW5haXN0dWRpbzAeFw0yNDEyMTgwOTQ2MTVaFw0zNDEyMTgwOTQ3NTVaMBYxFDASBgNVBAMMC2dlbmFpc3R1ZGlvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvc2DtuEdbs72kognmXqhZ6RD5KnRnWCsQYxDKLQNbvC6i3O1eBVhDMG8i/0VKZJVtF4mffsE1/kaY+vWTbUim9oLmRlUM3MzZ7ZD2SIaXhS0Pr3qH1ipjrlAlxaz6lx0ygqzW5+XgwR6eN2aqSBSWY803CoJEN/E5L8yNLap/lRLliTPsuUsgwOENswkMD7P3Oqa2lU0nJuy6S7Vu+rq6UwfGudJLMpyKntYvYTz+mfattgEaFMom9iPANCRxq629loTxIjFGho1eN7OHFNx8pPAPYj0Kvig90Q+odzx6xReHVHT5TqzTGpJHWzameUcr//GTbQVxkFyMQudG5lg1wIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCIOcpv0Bv+meKej5WnKxB7BtX51cBqhkc6h7jtVWk4SYUkpyGGM+3TPAjzliCMDpYipxK6KC2Y6sTqDOmk4Vpqdy1174Z2YQwJUXxTlbSUgoNZbwwVcVue6daGCj2Qutp5mAPvT1vOtHewkubO5y0FJ+oxfCGM4IoVXfq9IfXiYNfjURKGOU0Kw9WudDbtuokGd0TiR0VYWxHValoLz+x7HeKoefaXnr4TfQuF1N8H3p2JNEyr91CSUvJKjLXKdaYrVu6y9FJuPTcyJ8W9DBQd24Lp/bA+xFeuWRmpOKCZftpPRlmgVD/rzEtORaMUpqs7gy98guX3qs0E57vaIv+N" ],
+ "priority" : [ "100" ],
+ "algorithm" : [ "RSA-OAEP" ]
+ }
+ }, {
+ "id" : "508351be-b48c-4935-939f-cc39019140c4",
+ "name" : "hmac-generated-hs512",
+ "providerId" : "hmac-generated",
+ "subComponents" : { },
+ "config" : {
+ "kid" : [ "ec96911a-9154-4ecf-b722-d10ba648a031" ],
+ "secret" : [ "yJGYiZibpOb881NZ-Ya3Zx7hqra9dNFSSOoxgoNZF8esWAsggJPFPyGxPwPkfGi0s1Nc6FRkNccMm6vhQKROhHIk22eEYBq8aNTFkjcbcGLhN65uuxQmONAyi7zvbwlJuAF5Kldj0IhAr4_lMexAPcaDbzqmJmtw-hyZ3t1XBHE" ],
+ "priority" : [ "100" ],
+ "algorithm" : [ "HS512" ]
+ }
+ }, {
+ "id" : "ee246737-ac46-4aa7-9b07-a747246676a2",
+ "name" : "rsa-generated",
+ "providerId" : "rsa-generated",
+ "subComponents" : { },
+ "config" : {
+ "privateKey" : [ "MIIEowIBAAKCAQEA5u/9sI5z8woL0UlDaGCEy57GCj4KFtJnMdOvWjag+1TwvoD1d/kXVOM4UnKpICSS+bp6rohnoeeX0EMVKULk2NLXkhwMGXWxAcu8bRqjuSLJVKoKM+tj5hIAuDLeENmAkF+8FybEE+AewGEzY7eGH/N1yAeEbo3DTj34HtPvrvFm5BdlvvbxWByQAfTmKpT98WcZI7PhOKBCwZAOUP2NHG1botgG+ausK0bgjWd1wXPH17NwaA2sX3BeLrFSNLy1ZgX3RMEA+rSGPY2BgSt5CDw+y/IHg8Hy9gyAlHfUBGayAUsw8w575pe7AC1ez/2hvMW4+bNkXwyR45BpOCWpwwIDAQABAoIBAACIgJjShARf5a25pb9/UdZA9orW5G7gZtpiCqBgjBKW7dtNFYtfTupnMs59twkjWltGVarxMheZndlv6mQ/VXF5jOve8BaM31NSHdb3yHyDicYRW9tPIhoDWbUy4v4FEtOMI8QS39chiT8VTH6yR0crV6YJsU7lYkvtF8zsDMIOy3S+QN98be8ns0OzsM5HPlkp2K/pgXRNNntCzKqFBgKRtFurVFxF7Nht62ubbvu2uEFGOnUWj7ldk/MLGIJOZJ3oeGJVP0EDM1j+59UkTW3tbA/qwxavJFzS/qfgMwMLItmWz4PngR3kvfQoOrxh0WMRSWaye4O6X9aKryvyRdECgYEA9k/loc707WfYN/0C021qEATEa+dP+xPGiBuUEyqbaZCFTfgz+OPk80QEA7Gl3L/kduhO0DjZoccuHJy2sojzT2npsfpRY1L252pRsq0DOwj07pIH2B8TQTa/E5SeoAmrd2Vpt20j57R5uiss6yLjnRgZUkDoxUExPauOxOA9XZkCgYEA8AVJosCD5uhlf/jR1XAOIHvS+TD0fSyo8bTABfk65oH0QjLP9iTVZ0rBhcKzjvr+5IzuLMWIGG6uQLLmb4u/mjSZzrvfB6ZAyp1L7GRzLpd6FbZTtewOEwuP8PQw9lHa+/+NYdOC1a6qZWrbfPyqz2sTXJz9y7C8m5DZB5n1g7sCgYBkwhBEnb1xtE4tsRFL3fFKNjkHjusX4WIQYX+0S3ShvV3apFLWWJtarBMcU7pu0AysW6GJ6geU9z60s6LE6+LkNIZFqQlMIS8hQUvEVKQCrUpMoW4WCbg9sCB/6QbunqYGxHR3dWz/psM41dqdIXuM0sPg8u6FaoKzII/Zl4Vi2QKBgQCSqrh/YmJ3hEUZuQMICMwpH2Eg8sBDiTnHUSsRu2U5m+mVVhVsFL/uuWieAwbT9R4yrMeRxjbOrzt9v5Q+T0gKw9/Ey1qTAw2OgiX10r/rlZZ9lAd9IDzNeIBBvgX5TrWgzV0ojSXiyzPGe1CaBI+f5Y9URX50rI/kA9QK6BJ1pwKBgDhHIuBFpfZcdgHJyhN1Txp6975CvTpzdvjyZ7xaXYcie4LZz4gLzOzqxLGtZ45WRWsphHJOlCvRo8OEe07oaCK13D3IAv0VKE5N6sdx18KUyKit7rzH6NJf5syUs0fnJhO0j2IU+DTHtEz33sPkqauhA77j8w+24d/IlT26Ii7J" ],
+ "certificate" : [ "MIICpTCCAY0CBgGT2Sq2EzANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtnZW5haXN0dWRpbzAeFw0yNDEyMTgwOTQ2MTVaFw0zNDEyMTgwOTQ3NTVaMBYxFDASBgNVBAMMC2dlbmFpc3R1ZGlvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5u/9sI5z8woL0UlDaGCEy57GCj4KFtJnMdOvWjag+1TwvoD1d/kXVOM4UnKpICSS+bp6rohnoeeX0EMVKULk2NLXkhwMGXWxAcu8bRqjuSLJVKoKM+tj5hIAuDLeENmAkF+8FybEE+AewGEzY7eGH/N1yAeEbo3DTj34HtPvrvFm5BdlvvbxWByQAfTmKpT98WcZI7PhOKBCwZAOUP2NHG1botgG+ausK0bgjWd1wXPH17NwaA2sX3BeLrFSNLy1ZgX3RMEA+rSGPY2BgSt5CDw+y/IHg8Hy9gyAlHfUBGayAUsw8w575pe7AC1ez/2hvMW4+bNkXwyR45BpOCWpwwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCHDmnQS0rQg4aTA4a0X1jyTH21UJ7LZ9JPSchHJ+cK52umqO4uSGRn+bakTb30Y0Pfr82UQfy+Pqkr9hJejGuKhEGI4UhgUW9BcI4qnvhQ3OW+S0/ffNE3Zq4sv2wmmBwDhBrSmvHL2bOKlCfbLeyzmab7qffuKqWxfkfbP7jsL4+LfFuG12Q79NFRvau7FPeFzwXFeXGOaWFqM7TNtS04WdymBnUVMBSHu1CQEoYHE055eEAIL7j7ONZ3Be3/Rb3PN1h/4oaW7SoYThHpHlsMJsCgONSN6PvI/QdiJRbdPJe6whFauReDrmbKwb+nD6pb6sz6G1Uf2ZGzmSJP3Fk8" ],
+ "priority" : [ "100" ]
+ }
+ } ]
+ },
+ "internationalizationEnabled" : false,
+ "supportedLocales" : [ ],
+ "authenticationFlows" : [ {
+ "id" : "d47dbbfd-6d2e-42d3-b45c-33c5eee77014",
+ "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
+ } ]
+ }, {
+ "id" : "8f92cd72-09c8-44aa-8434-65d5b94dd0e5",
+ "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
+ } ]
+ }, {
+ "id" : "fca7a70f-3060-4715-800f-e59134d71ed3",
+ "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
+ } ]
+ }, {
+ "id" : "5228bb58-dbde-42cf-84b8-5099e9669fe3",
+ "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
+ } ]
+ }, {
+ "id" : "01a8795e-e280-45cb-8bdf-d0a8d798c53c",
+ "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
+ } ]
+ }, {
+ "id" : "3b45908f-85f7-4131-8b3c-f05b64252469",
+ "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
+ } ]
+ }, {
+ "id" : "109867e3-073b-4211-9a59-41ce1d42821c",
+ "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
+ } ]
+ }, {
+ "id" : "0c9e8544-d902-47c8-8546-55efb3b84355",
+ "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
+ } ]
+ }, {
+ "id" : "2b822d34-fd81-419c-b5a6-0f4dc98fed0e",
+ "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" : 30,
+ "autheticatorFlow" : true,
+ "flowAlias" : "forms",
+ "userSetupAllowed" : false
+ } ]
+ }, {
+ "id" : "f5947c13-adf9-4606-8b18-e978265bf037",
+ "alias" : "clients",
+ "description" : "Base authentication for clients",
+ "providerId" : "client-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "client-secret",
+ "authenticatorFlow" : false,
+ "requirement" : "ALTERNATIVE",
+ "priority" : 10,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ }, {
+ "authenticator" : "client-jwt",
+ "authenticatorFlow" : false,
+ "requirement" : "ALTERNATIVE",
+ "priority" : 20,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ }, {
+ "authenticator" : "client-secret-jwt",
+ "authenticatorFlow" : false,
+ "requirement" : "ALTERNATIVE",
+ "priority" : 30,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ }, {
+ "authenticator" : "client-x509",
+ "authenticatorFlow" : false,
+ "requirement" : "ALTERNATIVE",
+ "priority" : 40,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ } ]
+ }, {
+ "id" : "59496ed1-e246-4541-8f61-59e34d50c162",
+ "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
+ } ]
+ }, {
+ "id" : "07c4e744-67e1-486e-bf3f-e25685719f03",
+ "alias" : "docker auth",
+ "description" : "Used by Docker clients to authenticate against the IDP",
+ "providerId" : "basic-flow",
+ "topLevel" : true,
+ "builtIn" : true,
+ "authenticationExecutions" : [ {
+ "authenticator" : "docker-http-basic-authenticator",
+ "authenticatorFlow" : false,
+ "requirement" : "REQUIRED",
+ "priority" : 10,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ } ]
+ }, {
+ "id" : "d3110098-3156-415b-9bef-6491a1f6315f",
+ "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
+ } ]
+ }, {
+ "id" : "650db54f-26dd-4721-ae84-d4fa1fe5000d",
+ "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
+ } ]
+ }, {
+ "id" : "73baa0b6-c435-47c2-b520-e039814ddf44",
+ "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
+ } ]
+ }, {
+ "id" : "92063908-3a5b-44ee-bd68-96c6e8e75476",
+ "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
+ }, {
+ "authenticator" : "registration-recaptcha-action",
+ "authenticatorFlow" : false,
+ "requirement" : "DISABLED",
+ "priority" : 60,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ }, {
+ "authenticator" : "registration-terms-and-conditions",
+ "authenticatorFlow" : false,
+ "requirement" : "DISABLED",
+ "priority" : 70,
+ "autheticatorFlow" : false,
+ "userSetupAllowed" : false
+ } ]
+ }, {
+ "id" : "296e20d1-9389-4378-b960-432e97313cb8",
+ "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
+ } ]
+ }, {
+ "id" : "ce6d811a-74be-44d1-b25d-97228fd58d0c",
+ "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" : [ {
+ "id" : "f2ce9b19-6b39-4804-b9d2-ddbf8950e968",
+ "alias" : "create unique user config",
+ "config" : {
+ "require.password.update.after.registration" : "false"
+ }
+ }, {
+ "id" : "ba967870-3e45-4306-a2c7-cef80cb0c53b",
+ "alias" : "review profile config",
+ "config" : {
+ "update.profile.on.first.login" : "missing"
+ }
+ } ],
+ "requiredActions" : [ {
+ "alias" : "CONFIGURE_TOTP",
+ "name" : "Configure OTP",
+ "providerId" : "CONFIGURE_TOTP",
+ "enabled" : true,
+ "defaultAction" : false,
+ "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",
+ "clientOfflineSessionMaxLifespan" : "0",
+ "oauth2DevicePollingInterval" : "5",
+ "clientSessionIdleTimeout" : "0",
+ "clientOfflineSessionIdleTimeout" : "0",
+ "cibaInterval" : "5",
+ "realmReusableOtpCode" : "false",
+ "cibaExpiresIn" : "120",
+ "oauth2DeviceCodeLifespan" : "600",
+ "parRequestUriLifespan" : "60",
+ "clientSessionMaxLifespan" : "0",
+ "frontendUrl" : "",
+ "organizationsEnabled" : "false",
+ "acr.loa.map" : "{}"
+ },
+ "keycloakVersion" : "26.0.7",
+ "userManagedAccessAllowed" : false,
+ "organizationsEnabled" : false,
+ "clientProfiles" : {
+ "profiles" : [ ]
+ },
+ "clientPolicies" : {
+ "policies" : [ ]
+ }
+}
\ No newline at end of file
diff --git a/assets/keycloak/data/import/genaistudio-users-0.json b/assets/keycloak/data/import/genaistudio-users-0.json
new file mode 100644
index 0000000..00ff2fa
--- /dev/null
+++ b/assets/keycloak/data/import/genaistudio-users-0.json
@@ -0,0 +1,26 @@
+{
+ "realm" : "genaistudio",
+ "users" : [ {
+ "id" : "1133d20f-3c10-4bb3-b51a-1d68e426acf4",
+ "username" : "test_automation@gmail.com",
+ "firstName" : "test",
+ "lastName" : "test",
+ "email" : "test_automation@gmail.com",
+ "emailVerified" : false,
+ "createdTimestamp" : 1734518970757,
+ "enabled" : true,
+ "totp" : false,
+ "credentials" : [ {
+ "id" : "4e9468e9-27f5-41a2-9c8a-f759446e3ad5",
+ "type" : "password",
+ "createdDate" : 1734518970820,
+ "secretData" : "{\"value\":\"gm5NNTNC5AykgayjuY9Ci9nXLrY1x8BgL3EUjD7R1zs=\",\"salt\":\"lP/L902ch8edynC5EU4Q0Q==\",\"additionalParameters\":{}}",
+ "credentialData" : "{\"hashIterations\":5,\"algorithm\":\"argon2\",\"additionalParameters\":{\"hashLength\":[\"32\"],\"memory\":[\"7168\"],\"type\":[\"id\"],\"version\":[\"1.3\"],\"parallelism\":[\"1\"]}}"
+ } ],
+ "disableableCredentialTypes" : [ ],
+ "requiredActions" : [ ],
+ "realmRoles" : [ "default-roles-genaistudio" ],
+ "notBefore" : 0,
+ "groups" : [ "/user" ]
+ } ]
+}
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/admin/resources/css/styles.css b/assets/keycloak/themes/opea/admin/resources/css/styles.css
new file mode 100644
index 0000000..6795108
--- /dev/null
+++ b/assets/keycloak/themes/opea/admin/resources/css/styles.css
@@ -0,0 +1,9 @@
+/* admin/resources/css/styles.css file */
+/* Override global colors */
+:root {
+ --pf-global--primary-color--100: var(--pf-global--palette--purple-600);
+ --pf-global--primary-color--200: var(--pf-global--palette--purple-700);
+ --pf-global--active-color--100: var(--pf-global--palette--purple-600);
+ --pf-global--BackgroundColor--dark-300: #606C38;
+ --pf-global--BackgroundColor--dark-100: #283618;
+ }
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/admin/resources/favicon.svg b/assets/keycloak/themes/opea/admin/resources/favicon.svg
new file mode 100644
index 0000000..3c4b988
--- /dev/null
+++ b/assets/keycloak/themes/opea/admin/resources/favicon.svg
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/admin/resources/icon.svg b/assets/keycloak/themes/opea/admin/resources/icon.svg
new file mode 100644
index 0000000..3c4b988
--- /dev/null
+++ b/assets/keycloak/themes/opea/admin/resources/icon.svg
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/admin/resources/logo.svg b/assets/keycloak/themes/opea/admin/resources/logo.svg
new file mode 100644
index 0000000..da5c8a0
--- /dev/null
+++ b/assets/keycloak/themes/opea/admin/resources/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/admin/theme.properties b/assets/keycloak/themes/opea/admin/theme.properties
new file mode 100644
index 0000000..a781934
--- /dev/null
+++ b/assets/keycloak/themes/opea/admin/theme.properties
@@ -0,0 +1,5 @@
+# admin/theme.properties file
+
+parent=keycloak.v2
+import=common/keycloak
+styles=css/styles.css
\ No newline at end of file
diff --git a/assets/keycloak/themes/opea/login/resources/css/styles.css b/assets/keycloak/themes/opea/login/resources/css/styles.css
new file mode 100644
index 0000000..16366e7
--- /dev/null
+++ b/assets/keycloak/themes/opea/login/resources/css/styles.css
@@ -0,0 +1,635 @@
+/* Patternfly CSS places a "bg-login.jpg" as the background on this ".login-pf" class.
+ This clashes with the "keycloak-bg.png' background defined on the body below.
+ Therefore the Patternfly background must be set to none. */
+ .login-pf {
+ background: none;
+}
+
+.login-pf body {
+ background: url("../img/OPEA_Studio_bg.jpg") no-repeat center center fixed;
+ background-size:cover;
+ /* height: 100%; */
+}
+
+.login-pf-page .login-pf-page-header{
+ margin-bottom: 10px;
+}
+
+textarea.pf-c-form-control {
+ height: auto;
+}
+
+.pf-c-alert__title {
+ font-size: var(--pf-global--FontSize--xs);
+}
+
+p.instruction {
+ margin: 5px 0;
+}
+
+.pf-c-button.pf-m-control {
+ border-color: rgba(230, 230, 230, 0.5);
+}
+
+h1#kc-page-title {
+ margin-top: 10px;
+}
+
+#kc-locale ul {
+ background-color: var(--pf-global--BackgroundColor--100);
+ display: none;
+ top: 20px;
+ min-width: 100px;
+ padding: 0;
+}
+
+#kc-locale-dropdown{
+ display: inline-block;
+}
+
+#kc-locale-dropdown:hover ul {
+ display:block;
+}
+
+#kc-locale-dropdown a {
+ color: var(--pf-global--Color--200);
+ text-align: right;
+ font-size: var(--pf-global--FontSize--sm);
+}
+
+#kc-locale-dropdown button {
+ background: none;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ color: var(--pf-global--Color--200);
+ text-align: right;
+ font-size: var(--pf-global--FontSize--sm);
+}
+
+button#kc-current-locale-link::after {
+ content: "\2c5";
+ margin-left: var(--pf-global--spacer--xs)
+}
+
+.login-pf .container {
+ padding-top: 40px;
+}
+
+.login-pf a:hover {
+ color: #0099d3;
+}
+
+#kc-logo {
+ width: 100%;
+}
+
+div.kc-logo-text {
+ background-image: url(../img/keycloak-logo-text.png);
+ background-repeat: no-repeat;
+ /* height: 63px;
+ width: 300px; */
+ margin: 0 auto;
+}
+
+div.kc-logo-text span {
+ display: none;
+}
+
+#kc-header {
+ color: #ededed;
+ overflow: visible;
+ white-space: nowrap;
+}
+
+#kc-header-wrapper {
+ font-size: 29px;
+ color: darkorange;
+ text-transform: capitalize;
+ letter-spacing: 3px;
+ line-height: 1.2em;
+ padding: 200px 0px 0px;
+ white-space: normal;
+ font-weight: bold;
+}
+
+#kc-content {
+ width: 100%;
+}
+
+#kc-attempted-username {
+ font-size: 20px;
+ font-family: inherit;
+ font-weight: normal;
+ padding-right: 10px;
+}
+
+#kc-username {
+ text-align: center;
+ margin-bottom:-10px;
+}
+
+#kc-webauthn-settings-form {
+ padding-top: 8px;
+}
+
+#kc-form-webauthn .select-auth-box-parent {
+ pointer-events: none;
+}
+
+#kc-form-webauthn .select-auth-box-desc {
+ color: var(--pf-global--palette--black-600);
+}
+
+#kc-form-webauthn .select-auth-box-headline {
+ color: var(--pf-global--Color--300);
+}
+
+#kc-form-webauthn .select-auth-box-icon {
+ flex: 0 0 3em;
+}
+
+#kc-form-webauthn .select-auth-box-icon-properties {
+ margin-top: 10px;
+ font-size: 1.8em;
+}
+
+#kc-form-webauthn .select-auth-box-icon-properties.unknown-transport-class {
+ margin-top: 3px;
+}
+
+#kc-form-webauthn .pf-l-stack__item {
+ margin: -1px 0;
+}
+
+#kc-content-wrapper {
+ margin-top: 20px;
+}
+
+#kc-form-wrapper {
+ margin-top: 10px;
+}
+
+#kc-info {
+ margin: 20px -40px -30px;
+}
+
+#kc-info-wrapper {
+ font-size: 13px;
+ padding: 15px 35px;
+ background-color: #F0F0F0;
+}
+
+#kc-form-options span {
+ display: block;
+}
+
+#kc-form-options .checkbox {
+ margin-top: 0;
+ color: #72767b;
+}
+
+#kc-terms-text {
+ margin-bottom: 20px;
+}
+
+#kc-registration-terms-text {
+ max-height: 100px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ margin: 5px;
+}
+
+#kc-registration {
+ margin-bottom: 0;
+}
+
+/* TOTP */
+
+.subtitle {
+ text-align: right;
+ margin-top: 30px;
+ color: #909090;
+}
+
+.required {
+ color: var(--pf-global--danger-color--200);
+}
+
+ol#kc-totp-settings {
+ margin: 0;
+ padding-left: 20px;
+}
+
+ul#kc-totp-supported-apps {
+ margin-bottom: 10px;
+}
+
+#kc-totp-secret-qr-code {
+ max-width:150px;
+ max-height:150px;
+}
+
+#kc-totp-secret-key {
+ background-color: #fff;
+ color: #333333;
+ font-size: 16px;
+ padding: 10px 0;
+}
+
+/* OAuth */
+
+#kc-oauth h3 {
+ margin-top: 0;
+}
+
+#kc-oauth ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+#kc-oauth ul li {
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ font-size: 12px;
+ padding: 10px 0;
+}
+
+#kc-oauth ul li:first-of-type {
+ border-top: 0;
+}
+
+#kc-oauth .kc-role {
+ display: inline-block;
+ width: 50%;
+}
+
+/* Code */
+#kc-code textarea {
+ width: 100%;
+ height: 8em;
+}
+
+/* Social */
+.kc-social-links {
+ margin-top: 20px;
+}
+
+.kc-social-links li {
+ width: 100%;
+}
+
+.kc-social-provider-logo {
+ font-size: 23px;
+ width: 30px;
+ height: 25px;
+ float: left;
+}
+
+.kc-social-gray {
+ color: var(--pf-global--Color--200);
+}
+
+.kc-social-gray h2 {
+ font-size: 1em;
+}
+
+.kc-social-item {
+ margin-bottom: var(--pf-global--spacer--sm);
+ font-size: 15px;
+ text-align: center;
+}
+
+.kc-social-provider-name {
+ position: relative;
+}
+
+.kc-social-icon-text {
+ left: -15px;
+}
+
+.kc-social-grid {
+ display:grid;
+ grid-column-gap: 10px;
+ grid-row-gap: 5px;
+ grid-column-end: span 6;
+ --pf-l-grid__item--GridColumnEnd: span 6;
+}
+
+.kc-social-grid .kc-social-icon-text {
+ left: -10px;
+}
+
+.kc-login-tooltip {
+ position: relative;
+ display: inline-block;
+}
+
+.kc-social-section {
+ text-align: center;
+}
+
+.kc-social-section hr{
+ margin-bottom: 10px
+}
+
+.kc-login-tooltip .kc-tooltip-text{
+ top:-3px;
+ left:160%;
+ background-color: black;
+ visibility: hidden;
+ color: #fff;
+
+ min-width:130px;
+ text-align: center;
+ border-radius: 2px;
+ box-shadow:0 1px 8px rgba(0,0,0,0.6);
+ padding: 5px;
+
+ position: absolute;
+ opacity:0;
+ transition:opacity 0.5s;
+}
+
+/* Show tooltip */
+.kc-login-tooltip:hover .kc-tooltip-text {
+ visibility: visible;
+ opacity:0.7;
+}
+
+/* Arrow for tooltip */
+.kc-login-tooltip .kc-tooltip-text::after {
+ content: " ";
+ position: absolute;
+ top: 15px;
+ right: 100%;
+ margin-top: -5px;
+ border-width: 5px;
+ border-style: solid;
+ border-color: transparent black transparent transparent;
+}
+
+@media (min-width: 768px) {
+ #kc-container-wrapper {
+ position: absolute;
+ width: 100%;
+ }
+
+ .login-pf .container {
+ padding-right: 80px;
+ }
+
+ #kc-locale {
+ position: relative;
+ text-align: right;
+ z-index: 9999;
+ }
+}
+
+@media (max-width: 767px) {
+
+ .login-pf body {
+ background: rgb(255, 255, 255);
+ }
+
+ #kc-header {
+ padding-left: 15px;
+ padding-right: 15px;
+ float: none;
+ text-align: left;
+ }
+
+ #kc-header-wrapper {
+ font-size: 16px;
+ font-weight: bold;
+ padding: 20px 60px 0 0;
+ color: #72767b;
+ letter-spacing: 0;
+ }
+
+ div.kc-logo-text {
+ margin: 0;
+ width: 150px;
+ height: 32px;
+ background-size: 100%;
+ }
+
+ #kc-form {
+ float: none;
+ }
+
+ #kc-info-wrapper {
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ background-color: transparent;
+ }
+
+ .login-pf .container {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+
+ #kc-locale {
+ position: absolute;
+ width: 200px;
+ top: 20px;
+ right: 20px;
+ text-align: right;
+ z-index: 9999;
+ }
+}
+
+@media (min-height: 646px) {
+ #kc-container-wrapper {
+ bottom: 12%;
+ }
+}
+
+@media (max-height: 645px) {
+ #kc-container-wrapper {
+ padding-top: 50px;
+ top: 20%;
+ }
+}
+
+.card-pf form.form-actions .btn {
+ float: right;
+ margin-left: 10px;
+}
+
+#kc-form-buttons {
+ margin-top: 20px;
+}
+
+.login-pf-page .login-pf-brand {
+ margin-top: 20px;
+ max-width: 360px;
+ width: 40%;
+}
+
+.select-auth-box-arrow{
+ display: flex;
+ align-items: center;
+ margin-right: 2rem;
+}
+
+.select-auth-box-icon{
+ display: flex;
+ flex: 0 0 2em;
+ justify-content: center;
+ margin-right: 1rem;
+ margin-left: 3rem;
+}
+
+.select-auth-box-parent{
+ border-top: 1px solid var(--pf-global--palette--black-200);
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+ cursor: pointer;
+ text-align: left;
+ align-items: unset;
+ background-color: unset;
+ border-right: unset;
+ border-bottom: unset;
+ border-left: unset;
+}
+
+.select-auth-box-parent:hover{
+ background-color: #f7f8f8;
+}
+
+.select-auth-container {
+ padding-bottom: 0px !important;
+}
+
+.select-auth-box-headline {
+ font-size: var(--pf-global--FontSize--md);
+ color: var(--pf-global--primary-color--100);
+ font-weight: bold;
+}
+
+.select-auth-box-desc {
+ font-size: var(--pf-global--FontSize--sm);
+}
+
+.select-auth-box-paragraph {
+ text-align: center;
+ font-size: var(--pf-global--FontSize--md);
+ margin-bottom: 5px;
+}
+
+.card-pf {
+ margin: 0 auto;
+ box-shadow: var(--pf-global--BoxShadow--lg);
+ padding: 0 20px;
+ max-width: 500px;
+ border-top: 4px solid;
+ border-color: var(--pf-global--primary-color--100);
+}
+
+/*phone*/
+@media (max-width: 767px) {
+ .login-pf-page .card-pf {
+ max-width: none;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ border-top: 0;
+ box-shadow: 0 0;
+ }
+
+ .kc-social-grid {
+ grid-column-end: 12;
+ --pf-l-grid__item--GridColumnEnd: span 12;
+ }
+
+ .kc-social-grid .kc-social-icon-text {
+ left: -15px;
+ }
+}
+
+.login-pf-page .login-pf-signup {
+ font-size: 15px;
+ color: #72767b;
+}
+#kc-content-wrapper .row {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.login-pf-page.login-pf-page-accounts {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.login-pf-page .btn-primary {
+ margin-top: 0;
+}
+
+.login-pf-page .list-view-pf .list-group-item {
+ border-bottom: 1px solid #ededed;
+}
+
+.login-pf-page .list-view-pf-description {
+ width: 100%;
+}
+
+#kc-form-login div.form-group:last-of-type,
+#kc-register-form div.form-group:last-of-type,
+#kc-update-profile-form div.form-group:last-of-type,
+#kc-update-email-form div.form-group:last-of-type{
+ margin-bottom: 0px;
+}
+
+.no-bottom-margin {
+ margin-bottom: 0;
+}
+
+#kc-back {
+ margin-top: 5px;
+}
+
+/* Recovery codes */
+.kc-recovery-codes-warning {
+ margin-bottom: 32px;
+}
+.kc-recovery-codes-warning .pf-c-alert__description p {
+ font-size: 0.875rem;
+}
+.kc-recovery-codes-list {
+ list-style: none;
+ columns: 2;
+ margin: 16px 0;
+ padding: 16px 16px 8px 16px;
+ border: 1px solid #D2D2D2;
+}
+.kc-recovery-codes-list li {
+ margin-bottom: 8px;
+ font-size: 11px;
+}
+.kc-recovery-codes-list li span {
+ color: #6A6E73;
+ width: 16px;
+ text-align: right;
+ display: inline-block;
+ margin-right: 1px;
+}
+
+.kc-recovery-codes-actions {
+ margin-bottom: 24px;
+}
+.kc-recovery-codes-actions button {
+ padding-left: 0;
+}
+.kc-recovery-codes-actions button i {
+ margin-right: 8px;
+}
+
+.kc-recovery-codes-confirmation {
+ align-items: baseline;
+ margin-bottom: 16px;
+}
+
+#certificate_subjectDN {
+ overflow-wrap: break-word
+}
+/* End Recovery codes */
diff --git a/assets/keycloak/themes/opea/login/resources/img/OPEA_Studio_bg.jpg b/assets/keycloak/themes/opea/login/resources/img/OPEA_Studio_bg.jpg
new file mode 100644
index 0000000..29a6928
Binary files /dev/null and b/assets/keycloak/themes/opea/login/resources/img/OPEA_Studio_bg.jpg differ
diff --git a/assets/keycloak/themes/opea/login/resources/img/favicon.ico b/assets/keycloak/themes/opea/login/resources/img/favicon.ico
new file mode 100644
index 0000000..bf51bcc
Binary files /dev/null and b/assets/keycloak/themes/opea/login/resources/img/favicon.ico differ
diff --git a/assets/keycloak/themes/opea/login/theme.properties b/assets/keycloak/themes/opea/login/theme.properties
new file mode 100644
index 0000000..3f3eeeb
--- /dev/null
+++ b/assets/keycloak/themes/opea/login/theme.properties
@@ -0,0 +1,4 @@
+parent=keycloak
+import=common/keycloak
+
+styles=css/styles.css
\ No newline at end of file