Showing preview only (775K chars total). Download the full file or copy to clipboard to get everything.
Repository: zonaut/keycloak-extensions
Branch: master
Commit: 6a626afd7720
Files: 152
Total size: 688.3 KB
Directory structure:
gitextract_lotnfs9n/
├── .gitattributes
├── .gitignore
├── .mvn/
│ └── wrapper/
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── README.md
├── _resources/
│ └── demo-config/
│ ├── export-dir/
│ │ └── .gitkeep
│ ├── import-dir/
│ │ ├── master-realm.json
│ │ ├── master-users-0.json
│ │ ├── placeholder-realm.json
│ │ └── placeholder-users-0.json
│ └── standalone-ha.xml
├── docker-compose.yml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── provider-domain/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── domain/
│ │ ├── CustomJpaEntityProvider.java
│ │ ├── CustomJpaEntityProviderFactory.java
│ │ └── Product.java
│ └── resources/
│ └── META-INF/
│ ├── 001-products.xml
│ ├── custom-changelog.xml
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.connections.jpa.entityprovider.JpaEntityProviderFactory
├── spi-event-listener/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── events/
│ │ └── logging/
│ │ ├── PlaceholderEventListenerProvider.java
│ │ ├── PlaceholderEventListenerProviderFactory.java
│ │ ├── UserUuidDto.java
│ │ └── UserVerifiedTransaction.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.events.EventListenerProviderFactory
├── spi-mail-template-override/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── mail/
│ │ ├── PlaceholderFreeMarkerEmailTemplateProvider.java
│ │ └── PlaceholderFreeMarkerEmailTemplateProviderFactory.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.email.EmailTemplateProviderFactory
├── spi-registration-profile/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── actions/
│ │ └── forms/
│ │ └── PlaceholderRegistrationProfile.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.authentication.FormActionFactory
├── spi-resource/
│ ├── README.md
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── zonaut/
│ │ │ └── keycloak/
│ │ │ └── extensions/
│ │ │ └── resource/
│ │ │ ├── AuthCheck.java
│ │ │ ├── AuthCheckType.java
│ │ │ ├── CustomResourceProvider.java
│ │ │ └── CustomResourceProviderFactory.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── jboss-deployment-structure.xml
│ │ └── services/
│ │ └── org.keycloak.services.resource.RealmResourceProviderFactory
│ ├── test-anonymous-user.sh
│ └── test-authenticated-user.sh
└── theme-minimal/
├── README.md
├── pom.xml
└── src/
└── main/
└── resources/
├── META-INF/
│ └── keycloak-themes.json
└── theme/
└── theme-minimal/
├── account/
│ ├── resources/
│ │ └── css/
│ │ └── account.css
│ └── theme.properties
├── admin/
│ ├── resources/
│ │ └── css/
│ │ └── styles.css
│ └── theme.properties
├── email/
│ ├── html/
│ │ ├── email-test.ftl
│ │ ├── email-verification-with-code.ftl
│ │ ├── email-verification.ftl
│ │ ├── event-login_error.ftl
│ │ ├── event-remove_totp.ftl
│ │ ├── event-update_password.ftl
│ │ ├── event-update_totp.ftl
│ │ ├── executeActions.ftl
│ │ ├── identity-provider-link.ftl
│ │ └── password-reset.ftl
│ ├── messages/
│ │ ├── messages_ca.properties
│ │ ├── messages_cs.properties
│ │ ├── messages_de.properties
│ │ ├── messages_en.properties
│ │ ├── messages_es.properties
│ │ ├── messages_fr.properties
│ │ ├── messages_it.properties
│ │ ├── messages_ja.properties
│ │ ├── messages_lt.properties
│ │ ├── messages_nl.properties
│ │ ├── messages_no.properties
│ │ ├── messages_pl.properties
│ │ ├── messages_pt_BR.properties
│ │ ├── messages_ru.properties
│ │ ├── messages_sk.properties
│ │ ├── messages_sv.properties
│ │ ├── messages_tr.properties
│ │ └── messages_zh_CN.properties
│ ├── text/
│ │ ├── email-test.ftl
│ │ ├── email-verification-with-code.ftl
│ │ ├── email-verification.ftl
│ │ ├── event-login_error.ftl
│ │ ├── event-remove_totp.ftl
│ │ ├── event-update_password.ftl
│ │ ├── event-update_totp.ftl
│ │ ├── executeActions.ftl
│ │ ├── identity-provider-link.ftl
│ │ └── password-reset.ftl
│ └── theme.properties
├── login/
│ ├── cli_splash.ftl
│ ├── code.ftl
│ ├── error.ftl
│ ├── info.ftl
│ ├── login-config-totp-text.ftl
│ ├── login-config-totp.ftl
│ ├── login-idp-link-confirm.ftl
│ ├── login-idp-link-email.ftl
│ ├── login-oauth-grant.ftl
│ ├── login-otp.ftl
│ ├── login-page-expired.ftl
│ ├── login-password.ftl
│ ├── login-reset-password.ftl
│ ├── login-update-password.ftl
│ ├── login-update-profile.ftl
│ ├── login-username.ftl
│ ├── login-verify-email-code-text.ftl
│ ├── login-verify-email.ftl
│ ├── login-x509-info.ftl
│ ├── login.ftl
│ ├── messages/
│ │ ├── messages_ca.properties
│ │ ├── messages_cs.properties
│ │ ├── messages_de.properties
│ │ ├── messages_en.properties
│ │ ├── messages_es.properties
│ │ ├── messages_fr.properties
│ │ ├── messages_it.properties
│ │ ├── messages_ja.properties
│ │ ├── messages_lt.properties
│ │ ├── messages_nl.properties
│ │ ├── messages_no.properties
│ │ ├── messages_pl.properties
│ │ ├── messages_pt_BR.properties
│ │ ├── messages_ru.properties
│ │ ├── messages_sk.properties
│ │ ├── messages_sv.properties
│ │ ├── messages_tr.properties
│ │ └── messages_zh_CN.properties
│ ├── register.ftl
│ ├── resources/
│ │ ├── css/
│ │ │ └── login.css
│ │ └── js/
│ │ └── base64url.js
│ ├── saml-post-form.ftl
│ ├── select-authenticator.ftl
│ ├── template.ftl
│ ├── terms.ftl
│ ├── theme.properties
│ ├── webauthn-authenticate.ftl
│ ├── webauthn-error.ftl
│ └── webauthn-register.ftl
└── welcome/
├── index.ftl
├── resources/
│ └── css/
│ └── welcome.css
└── theme.properties
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.ftl linguist-detectable=false
*.css linguist-detectable=false
================================================
FILE: .gitignore
================================================
# Customize with https://github.com/github/gitignore
# compiled output
/dist
/tmp
/out-tsc
/node
/build
/out
target/
dist/
.gradle
# dependencies
/node_modules
.vertx
# IDEs and editors
*.iml
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
testem.log
/typings
# e2e
/e2e/*.js
/e2e/*.map
# System Files
.DS_Store
Thumbs.db
================================================
FILE: .mvn/wrapper/MavenWrapperDownloader.java
================================================
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
================================================
FILE: README.md
================================================
# Keycloak extensions
**This repo is no longer maintained**
Keycloak extension examples.
Titles with * are already activated when running `docker-compose up`
* [provider-domain](provider-domain/README.md) *
* example of adding new domain entities
* [spi-event-listener](spi-event-listener/README.md) *
* example of a custom event listener
* [spi-mail-template-override](spi-mail-template-override/README.md) *
* example on how to change default mail behaviour and add extra variables to it.
* [spi-registration-profile](spi-registration-profile/README.md)
* disable first and last name validation in the registration page
* [spi-resource](spi-resource/README.md) *
* example of a custom REST resource
* [theme-minimal](theme-minimal/README.md) *
* a custom theme with minimal changes
## Build
Build all
./mvnw clean install
Build single module
./mvnw clean install -pl provider-domain
./mvnw clean install -pl spi-event-listener
./mvnw clean install -pl spi-mail-template-override
./mvnw clean install -pl spi-registration-profile
./mvnw clean install -pl spi-resource
./mvnw clean install -pl theme-minimal
## Run with Docker Compose
You need to build all modules first because we mount the jars in the docker-compose file
Run
docker-compose up
Stop
CTRL + C
docker-compose down
* Keycloak admin will be available on http://localhost:8088/auth/
* User -> admin
* Password -> password
* A placeholder realm is available on http://localhost:8088/auth/realms/placeholder
* users
* james@placeholder.com
* jennifer@placeholder.com
* john@placeholder.com
* mary@placeholder.com
* patricia@placeholder.com
* robert@placeholder.com
* Password is always 'password' for those users
* a realm role product_view is available and assigned to robert@placeholder.com
* 2 clients are available under this realm
* client-one - public with Direct Access Grants Enabled
* client-two - public with Direct Access Grants Enabled
* Mailhog will be available on http://localhost:8025/
## Export realms and users
* Run `docker-compose up`
* Make your changes in Keycloak
* Press `CTRL + C ` but do NOT run docker-compose down
* Uncomment the `-Dkeycloak.migration.action=export...` under commands in the docker-compose file.
* Comment the `-Dkeycloak.migration.action=import` under commands in the docker-compose file.
* Run `docker-compose up`
* all realms and users will be exported in the `_resources/demo-config/export-dir`
* You can now run `docker-compose down` and revert the changes you made to the docker-compose file
* Copy the contents of the export dir to the import dir if you want to replace them
## Other resources
Don't forget to look in the actual Keycloak code itself because the examples are based on the implementations itself.
* https://github.com/keycloak
* https://github.com/keycloak/keycloak/tree/master/examples
* https://www.keycloak.org/docs/latest/server_development/
* https://github.com/thomasdarimont/keycloak-extension-playground
================================================
FILE: _resources/demo-config/export-dir/.gitkeep
================================================
================================================
FILE: _resources/demo-config/import-dir/master-realm.json
================================================
{
"id" : "master",
"realm" : "master",
"displayName" : "Keycloak",
"displayNameHtml" : "<div class=\"kc-logo-text\"><span>Keycloak</span></div>",
"notBefore" : 0,
"revokeRefreshToken" : false,
"refreshTokenMaxReuse" : 0,
"accessTokenLifespan" : 60,
"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,
"enabled" : true,
"sslRequired" : "external",
"registrationAllowed" : false,
"registrationEmailAsUsername" : false,
"rememberMe" : false,
"verifyEmail" : false,
"loginWithEmailAllowed" : true,
"duplicateEmailsAllowed" : false,
"resetPasswordAllowed" : false,
"editUsernameAllowed" : false,
"bruteForceProtected" : false,
"permanentLockout" : false,
"maxFailureWaitSeconds" : 900,
"minimumQuickLoginWaitSeconds" : 60,
"waitIncrementSeconds" : 60,
"quickLoginCheckMilliSeconds" : 1000,
"maxDeltaTimeSeconds" : 43200,
"failureFactor" : 30,
"roles" : {
"realm" : [ {
"id" : "d3c4feab-b112-49c3-b467-39f6f766dbfc",
"name" : "admin",
"description" : "${role_admin}",
"composite" : true,
"composites" : {
"realm" : [ "create-realm" ],
"client" : {
"placeholder-realm" : [ "manage-authorization", "impersonation", "manage-clients", "manage-events", "manage-users", "view-events", "manage-realm", "query-clients", "view-users", "create-client", "query-realms", "view-clients", "view-authorization", "query-users", "view-identity-providers", "view-realm", "manage-identity-providers", "query-groups" ],
"master-realm" : [ "manage-identity-providers", "view-users", "manage-users", "view-clients", "query-users", "manage-clients", "query-groups", "view-realm", "view-identity-providers", "manage-authorization", "manage-events", "view-authorization", "impersonation", "create-client", "query-clients", "manage-realm", "view-events", "query-realms" ]
}
},
"clientRole" : false,
"containerId" : "master",
"attributes" : { }
}, {
"id" : "3f2b4595-a234-4af7-b0df-d1d507918175",
"name" : "uma_authorization",
"description" : "${role_uma_authorization}",
"composite" : false,
"clientRole" : false,
"containerId" : "master",
"attributes" : { }
}, {
"id" : "981fa07e-a331-4d58-8556-341ce1a5c19d",
"name" : "create-realm",
"description" : "${role_create-realm}",
"composite" : false,
"clientRole" : false,
"containerId" : "master",
"attributes" : { }
}, {
"id" : "ac747403-1d82-46bf-a57e-55a58a8bfaaa",
"name" : "offline_access",
"description" : "${role_offline-access}",
"composite" : false,
"clientRole" : false,
"containerId" : "master",
"attributes" : { }
} ],
"client" : {
"security-admin-console" : [ ],
"placeholder-realm" : [ {
"id" : "65d55dea-9b3f-4f71-9fbe-0c8a2915fd60",
"name" : "manage-authorization",
"description" : "${role_manage-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "be1aba71-d1c5-44c4-8d3d-1d3f4ec001bb",
"name" : "impersonation",
"description" : "${role_impersonation}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "87ba9aee-ce2e-47ac-850c-fa7aa72043f4",
"name" : "manage-clients",
"description" : "${role_manage-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "95e28cf6-7fc3-40e9-82a4-b126af272c4c",
"name" : "create-client",
"description" : "${role_create-client}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "f004e4e8-927e-4e15-b221-d0cfedc72f76",
"name" : "query-realms",
"description" : "${role_query-realms}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "6725e72c-4dba-4d4e-b788-ea90aa2d4bc5",
"name" : "view-clients",
"description" : "${role_view-clients}",
"composite" : true,
"composites" : {
"client" : {
"placeholder-realm" : [ "query-clients" ]
}
},
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "4b5e33f8-4fe8-4375-863a-34838c656893",
"name" : "view-authorization",
"description" : "${role_view-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "ebd8d10f-0ea9-42b3-9842-0a2cdc8a5563",
"name" : "manage-events",
"description" : "${role_manage-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "a9bbc527-8bfa-41c5-ac6b-b01a86bd2513",
"name" : "query-users",
"description" : "${role_query-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "1d8e33fe-5ed0-4e28-89ed-9c0a2d0ada65",
"name" : "manage-users",
"description" : "${role_manage-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "ba7f4ce3-9387-4144-984c-9188eb578674",
"name" : "view-events",
"description" : "${role_view-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "43e5dc26-c152-4afe-84b5-c5895ebaf447",
"name" : "view-identity-providers",
"description" : "${role_view-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "f2f55597-493a-48c1-b21a-9ffcf8f29dee",
"name" : "manage-realm",
"description" : "${role_manage-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "72af326d-04c4-4d85-9b8e-ab48f99510f3",
"name" : "view-realm",
"description" : "${role_view-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "c9c68dae-7962-4482-9218-f1f5abf035d4",
"name" : "query-clients",
"description" : "${role_query-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "676ac518-4124-49fd-9976-fb702c126f7e",
"name" : "manage-identity-providers",
"description" : "${role_manage-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "8a3b8cb2-d3f7-4d5a-91b5-e7984e83510d",
"name" : "view-users",
"description" : "${role_view-users}",
"composite" : true,
"composites" : {
"client" : {
"placeholder-realm" : [ "query-users", "query-groups" ]
}
},
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
}, {
"id" : "e8f9f00f-2237-404a-ba5e-7984b4066e63",
"name" : "query-groups",
"description" : "${role_query-groups}",
"composite" : false,
"clientRole" : true,
"containerId" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"attributes" : { }
} ],
"admin-cli" : [ ],
"account-console" : [ ],
"broker" : [ {
"id" : "30c0b1d3-e072-4868-be6a-dad0d1d88226",
"name" : "read-token",
"description" : "${role_read-token}",
"composite" : false,
"clientRole" : true,
"containerId" : "4cdbad2e-c9c3-42d8-ac2f-abb297f5d29b",
"attributes" : { }
} ],
"master-realm" : [ {
"id" : "9ea8941a-6d9a-4c4b-b4ff-a3f15514232d",
"name" : "view-authorization",
"description" : "${role_view-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "c70b858b-1122-43ca-881c-473861f48646",
"name" : "manage-identity-providers",
"description" : "${role_manage-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "b49d526c-14d7-40a8-ae70-9487ac927eed",
"name" : "impersonation",
"description" : "${role_impersonation}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "5ba1c4d1-9b89-4230-8f6e-715a8cdf6806",
"name" : "view-users",
"description" : "${role_view-users}",
"composite" : true,
"composites" : {
"client" : {
"master-realm" : [ "query-groups", "query-users" ]
}
},
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "44513b89-28ae-45ce-bc09-3d17c88fda8d",
"name" : "manage-users",
"description" : "${role_manage-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "e9f86aef-83e2-49d9-b8fb-52694c86ad84",
"name" : "create-client",
"description" : "${role_create-client}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "9f69d69f-511a-490b-be8c-d4db50910ea8",
"name" : "view-clients",
"description" : "${role_view-clients}",
"composite" : true,
"composites" : {
"client" : {
"master-realm" : [ "query-clients" ]
}
},
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "69563566-f4d6-4036-9de5-0c2a36ca6174",
"name" : "query-users",
"description" : "${role_query-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "0ed4174a-a216-4fea-84dd-888feeec49f0",
"name" : "query-clients",
"description" : "${role_query-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "d8bb2fad-fce9-49b0-9610-62d5bfdcf3f2",
"name" : "manage-clients",
"description" : "${role_manage-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "d0269965-64c8-4e3f-9015-17f96f4f143a",
"name" : "query-groups",
"description" : "${role_query-groups}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "2a53d41c-ffb9-48de-9a9e-765b8f4cf83c",
"name" : "manage-realm",
"description" : "${role_manage-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "52a27df2-10ca-4ee7-9204-36a2dbb2d34d",
"name" : "view-realm",
"description" : "${role_view-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "989ecbac-d9ab-4ab7-96b3-58658797957e",
"name" : "view-identity-providers",
"description" : "${role_view-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "775136eb-c43c-4a0b-bdd9-4fd9e4c51ee9",
"name" : "view-events",
"description" : "${role_view-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "8d75c943-7e7d-48f7-a03c-ecdaad1e4265",
"name" : "manage-authorization",
"description" : "${role_manage-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "cfb7bca2-e44b-4c3c-8889-2fcbee4b72aa",
"name" : "manage-events",
"description" : "${role_manage-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
}, {
"id" : "0a1d5dd7-3046-40da-b733-7b9ef4358afd",
"name" : "query-realms",
"description" : "${role_query-realms}",
"composite" : false,
"clientRole" : true,
"containerId" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"attributes" : { }
} ],
"account" : [ {
"id" : "db72c5c2-1458-45dd-be67-a4460e9332bd",
"name" : "view-consent",
"description" : "${role_view-consent}",
"composite" : false,
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
}, {
"id" : "6e399309-298b-48df-a5aa-ac0737c01358",
"name" : "manage-consent",
"description" : "${role_manage-consent}",
"composite" : true,
"composites" : {
"client" : {
"account" : [ "view-consent" ]
}
},
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
}, {
"id" : "c0c5a82c-b5f7-427b-8e57-8e1a94445fc1",
"name" : "view-applications",
"description" : "${role_view-applications}",
"composite" : false,
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
}, {
"id" : "b4269015-6b78-4785-ae30-8f5d59e46fc4",
"name" : "manage-account",
"description" : "${role_manage-account}",
"composite" : true,
"composites" : {
"client" : {
"account" : [ "manage-account-links" ]
}
},
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
}, {
"id" : "ac209ae9-8d28-4e0f-a6fd-871aea7bf5c2",
"name" : "manage-account-links",
"description" : "${role_manage-account-links}",
"composite" : false,
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
}, {
"id" : "74e0a960-25b1-4f89-8be3-6dfaad51bcad",
"name" : "view-profile",
"description" : "${role_view-profile}",
"composite" : false,
"clientRole" : true,
"containerId" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"attributes" : { }
} ]
}
},
"groups" : [ ],
"defaultRoles" : [ "uma_authorization", "offline_access" ],
"requiredCredentials" : [ "password" ],
"otpPolicyType" : "totp",
"otpPolicyAlgorithm" : "HmacSHA1",
"otpPolicyInitialCounter" : 0,
"otpPolicyDigits" : 6,
"otpPolicyLookAheadWindow" : 1,
"otpPolicyPeriod" : 30,
"otpSupportedApplications" : [ "FreeOTP", "Google Authenticator" ],
"webAuthnPolicyRpEntityName" : "keycloak",
"webAuthnPolicySignatureAlgorithms" : [ "ES256" ],
"webAuthnPolicyRpId" : "",
"webAuthnPolicyAttestationConveyancePreference" : "not specified",
"webAuthnPolicyAuthenticatorAttachment" : "not specified",
"webAuthnPolicyRequireResidentKey" : "not specified",
"webAuthnPolicyUserVerificationRequirement" : "not specified",
"webAuthnPolicyCreateTimeout" : 0,
"webAuthnPolicyAvoidSameAuthenticatorRegister" : false,
"webAuthnPolicyAcceptableAaguids" : [ ],
"webAuthnPolicyPasswordlessRpEntityName" : "keycloak",
"webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ],
"webAuthnPolicyPasswordlessRpId" : "",
"webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified",
"webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified",
"webAuthnPolicyPasswordlessRequireResidentKey" : "not specified",
"webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified",
"webAuthnPolicyPasswordlessCreateTimeout" : 0,
"webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false,
"webAuthnPolicyPasswordlessAcceptableAaguids" : [ ],
"scopeMappings" : [ {
"clientScope" : "offline_access",
"roles" : [ "offline_access" ]
} ],
"clientScopeMappings" : {
"account" : [ {
"client" : "account-console",
"roles" : [ "manage-account" ]
} ]
},
"clients" : [ {
"id" : "289cc92e-2edf-45c4-9efb-f7db4229e240",
"clientId" : "account",
"name" : "${client_account}",
"rootUrl" : "${authBaseUrl}",
"baseUrl" : "/realms/master/account/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "aaf5c557-e731-4e43-bd9c-6502dd6c8b77",
"defaultRoles" : [ "manage-account", "view-profile" ],
"redirectUris" : [ "/realms/master/account/*" ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "58c97982-5457-4825-9c49-46f74343a98a",
"clientId" : "account-console",
"name" : "${client_account-console}",
"rootUrl" : "${authBaseUrl}",
"baseUrl" : "/realms/master/account/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "50ee17ab-e95e-4bc9-8051-6d3407e76bfc",
"redirectUris" : [ "/realms/master/account/*" ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"pkce.code.challenge.method" : "S256"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"protocolMappers" : [ {
"id" : "38a0de05-4ce1-416b-8cb1-2851047a4b7c",
"name" : "audience resolve",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-audience-resolve-mapper",
"consentRequired" : false,
"config" : { }
} ],
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "72c49e6c-d6d8-4dd3-a745-1770a4fc4b4b",
"clientId" : "admin-cli",
"name" : "${client_admin-cli}",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "eecb9c19-bd56-41e7-8c2f-a61903590847",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : false,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : true,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "4cdbad2e-c9c3-42d8-ac2f-abb297f5d29b",
"clientId" : "broker",
"name" : "${client_broker}",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "051ef83b-8c5a-4a37-9d3a-f4783eb17fa3",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "53067549-1a47-4ce8-ab6b-dffa5899e804",
"clientId" : "master-realm",
"name" : "master Realm",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "b6d8a7bd-7ec1-4b63-9f30-c04bc291e308",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : true,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : true,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "9260ed69-b3f7-44cc-a6f2-7eaec8bb0f10",
"clientId" : "placeholder-realm",
"name" : "placeholder Realm",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "ea6aea78-ca76-40f7-9f72-1ad9d727f7c8",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : true,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : true,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "0fe9d02c-f7b5-45e8-9a27-c5bd2488ef7e",
"clientId" : "security-admin-console",
"name" : "${client_security-admin-console}",
"rootUrl" : "${authAdminUrl}",
"baseUrl" : "/admin/master/console/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "7b1f48e1-85ae-46a0-8097-504e90c89c8d",
"redirectUris" : [ "/admin/master/console/*" ],
"webOrigins" : [ "+" ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"pkce.code.challenge.method" : "S256"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"protocolMappers" : [ {
"id" : "b757f2d3-0dde-4b29-8915-e163b0aeeaae",
"name" : "locale",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "locale",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "locale",
"jsonType.label" : "String"
}
} ],
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
} ],
"clientScopes" : [ {
"id" : "6fdde58c-192e-48e0-91bc-acb6f466d00b",
"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" : "07736879-8a26-4a34-8ce0-2b2b49559d61",
"name" : "role_list",
"description" : "SAML role list",
"protocol" : "saml",
"attributes" : {
"consent.screen.text" : "${samlRoleListScopeConsentText}",
"display.on.consent.screen" : "true"
},
"protocolMappers" : [ {
"id" : "1877c937-8c1a-48b8-9fef-c78eecb58cbf",
"name" : "role list",
"protocol" : "saml",
"protocolMapper" : "saml-role-list-mapper",
"consentRequired" : false,
"config" : {
"single" : "false",
"attribute.nameformat" : "Basic",
"attribute.name" : "Role"
}
} ]
}, {
"id" : "0cf4afba-e609-4fc7-9134-55e3ad1b7f39",
"name" : "profile",
"description" : "OpenID Connect built-in scope: profile",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${profileScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "77d30d3c-9069-47b0-b88f-e481b4207e2c",
"name" : "given name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "firstName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "given_name",
"jsonType.label" : "String"
}
}, {
"id" : "ded815a3-0110-4fbb-b148-283aa52142f9",
"name" : "profile",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "profile",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "profile",
"jsonType.label" : "String"
}
}, {
"id" : "9c4d720a-7ce0-4a8d-bdd5-5dedc3e4bc47",
"name" : "nickname",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "nickname",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "nickname",
"jsonType.label" : "String"
}
}, {
"id" : "a31c4b51-7d40-42db-8f32-12001994af0f",
"name" : "website",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "website",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "website",
"jsonType.label" : "String"
}
}, {
"id" : "5bea52ae-f0b8-4af4-ad22-bbf7c2bf98d1",
"name" : "birthdate",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "birthdate",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "birthdate",
"jsonType.label" : "String"
}
}, {
"id" : "ed55c7fa-4f35-446d-8086-a8409d091ffd",
"name" : "username",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "username",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "preferred_username",
"jsonType.label" : "String"
}
}, {
"id" : "cd2cb96d-c428-4c82-84b6-bc9d4aaadae7",
"name" : "locale",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "locale",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "locale",
"jsonType.label" : "String"
}
}, {
"id" : "55add740-d78b-44db-97b6-6079a4410a42",
"name" : "updated at",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "updatedAt",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "updated_at",
"jsonType.label" : "String"
}
}, {
"id" : "c05e2bb3-6bc1-47dd-a300-112cb456200d",
"name" : "picture",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "picture",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "picture",
"jsonType.label" : "String"
}
}, {
"id" : "6d2e95d6-2283-4497-b72d-35384a75e6dd",
"name" : "family name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "lastName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "family_name",
"jsonType.label" : "String"
}
}, {
"id" : "049faef7-ba09-4887-86c7-1ac1c5009d17",
"name" : "full name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-full-name-mapper",
"consentRequired" : false,
"config" : {
"id.token.claim" : "true",
"access.token.claim" : "true",
"userinfo.token.claim" : "true"
}
}, {
"id" : "1066660d-3c94-482c-97d1-323d78734c96",
"name" : "zoneinfo",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "zoneinfo",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "zoneinfo",
"jsonType.label" : "String"
}
}, {
"id" : "8e27aac4-092d-4eaf-88e9-872e9821a977",
"name" : "gender",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "gender",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "gender",
"jsonType.label" : "String"
}
}, {
"id" : "589f52a0-8ffd-4cf8-b2af-d26261125348",
"name" : "middle name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "middleName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "middle_name",
"jsonType.label" : "String"
}
} ]
}, {
"id" : "9f49aa9f-4820-4074-ab70-5eedb6baebb2",
"name" : "email",
"description" : "OpenID Connect built-in scope: email",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${emailScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "63e9a0d9-c722-4342-96c0-405961ebd11b",
"name" : "email verified",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "emailVerified",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "email_verified",
"jsonType.label" : "boolean"
}
}, {
"id" : "b1eed229-e25a-4889-9392-0414ed5fd49c",
"name" : "email",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "email",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "email",
"jsonType.label" : "String"
}
} ]
}, {
"id" : "542a09d4-cd9c-491e-8f35-1360785600b4",
"name" : "address",
"description" : "OpenID Connect built-in scope: address",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${addressScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "19a1905f-b3bd-44e0-a621-a311d1f451f9",
"name" : "address",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-address-mapper",
"consentRequired" : false,
"config" : {
"user.attribute.formatted" : "formatted",
"user.attribute.country" : "country",
"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" : "b4589106-906c-4956-9f55-49630525c7a2",
"name" : "phone",
"description" : "OpenID Connect built-in scope: phone",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${phoneScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "09c698fc-2b1c-46e9-8e67-ea6fbbe3bfcc",
"name" : "phone number verified",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "phoneNumberVerified",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "phone_number_verified",
"jsonType.label" : "boolean"
}
}, {
"id" : "40a27f11-8b12-4b7b-ab30-090fc5e2bfaa",
"name" : "phone number",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "phoneNumber",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "phone_number",
"jsonType.label" : "String"
}
} ]
}, {
"id" : "ade9ddcc-3208-4fa9-90ae-874f138c654f",
"name" : "roles",
"description" : "OpenID Connect scope for add user roles to the access token",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "false",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${rolesScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "1bd54fd6-e6ff-4c9b-8028-0c8ba87b7b9f",
"name" : "client roles",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-client-role-mapper",
"consentRequired" : false,
"config" : {
"user.attribute" : "foo",
"access.token.claim" : "true",
"claim.name" : "resource_access.${client_id}.roles",
"jsonType.label" : "String",
"multivalued" : "true"
}
}, {
"id" : "64b4283a-2e71-450c-9d47-8132e3dbb90f",
"name" : "audience resolve",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-audience-resolve-mapper",
"consentRequired" : false,
"config" : { }
}, {
"id" : "cde86219-5df1-4c90-8703-4a19ffa678df",
"name" : "realm roles",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-realm-role-mapper",
"consentRequired" : false,
"config" : {
"user.attribute" : "foo",
"access.token.claim" : "true",
"claim.name" : "realm_access.roles",
"jsonType.label" : "String",
"multivalued" : "true"
}
} ]
}, {
"id" : "d95f6c5e-7c25-4f5f-a66d-09a0e821d93d",
"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",
"display.on.consent.screen" : "false",
"consent.screen.text" : ""
},
"protocolMappers" : [ {
"id" : "fd571046-d716-480e-bcac-d0a0a17c7211",
"name" : "allowed web origins",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-allowed-origins-mapper",
"consentRequired" : false,
"config" : { }
} ]
}, {
"id" : "356ed32b-fb3b-46c1-861f-ae2cd77d2a43",
"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" : "b316d4b7-db10-433d-8f3f-42e81d63fc5b",
"name" : "upn",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "username",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "upn",
"jsonType.label" : "String"
}
}, {
"id" : "cf7d8c8b-5997-4f73-8188-8264784cab7b",
"name" : "groups",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-realm-role-mapper",
"consentRequired" : false,
"config" : {
"multivalued" : "true",
"userinfo.token.claim" : "true",
"user.attribute" : "foo",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "groups",
"jsonType.label" : "String"
}
} ]
} ],
"defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins" ],
"defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ],
"browserSecurityHeaders" : {
"contentSecurityPolicyReportOnly" : "",
"xContentTypeOptions" : "nosniff",
"xRobotsTag" : "none",
"xFrameOptions" : "SAMEORIGIN",
"contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
"xXSSProtection" : "1; mode=block",
"strictTransportSecurity" : "max-age=31536000; includeSubDomains"
},
"smtpServer" : { },
"eventsEnabled" : false,
"eventsListeners" : [ "jboss-logging" ],
"enabledEventTypes" : [ ],
"adminEventsEnabled" : false,
"adminEventsDetailsEnabled" : false,
"components" : {
"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ {
"id" : "f242eab3-b0ff-4fbc-bee1-76aaf1eff768",
"name" : "Consent Required",
"providerId" : "consent-required",
"subType" : "anonymous",
"subComponents" : { },
"config" : { }
}, {
"id" : "bc94017c-6d33-4693-b464-2a38f3fe5815",
"name" : "Max Clients Limit",
"providerId" : "max-clients",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"max-clients" : [ "200" ]
}
}, {
"id" : "a34570e6-5661-4686-a958-2210f7c901b0",
"name" : "Trusted Hosts",
"providerId" : "trusted-hosts",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"host-sending-registration-request-must-match" : [ "true" ],
"client-uris-must-match" : [ "true" ]
}
}, {
"id" : "6f7f96db-6c5f-4a20-b0e7-e799c2e7d124",
"name" : "Allowed Protocol Mapper Types",
"providerId" : "allowed-protocol-mappers",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper", "saml-user-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-property-mapper" ]
}
}, {
"id" : "5aea7b06-acd1-4e3d-ad10-2168a055e50b",
"name" : "Allowed Client Scopes",
"providerId" : "allowed-client-templates",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"allow-default-scopes" : [ "true" ]
}
}, {
"id" : "ca9d1883-c461-4ffa-85ef-a32d44f36d26",
"name" : "Full Scope Disabled",
"providerId" : "scope",
"subType" : "anonymous",
"subComponents" : { },
"config" : { }
}, {
"id" : "857125a2-3c97-4751-83bf-9dcf72170303",
"name" : "Allowed Protocol Mapper Types",
"providerId" : "allowed-protocol-mappers",
"subType" : "authenticated",
"subComponents" : { },
"config" : {
"allowed-protocol-mapper-types" : [ "oidc-address-mapper", "saml-role-list-mapper", "saml-user-property-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper" ]
}
}, {
"id" : "49d066a5-b45e-4421-bcea-a4f3c357436b",
"name" : "Allowed Client Scopes",
"providerId" : "allowed-client-templates",
"subType" : "authenticated",
"subComponents" : { },
"config" : {
"allow-default-scopes" : [ "true" ]
}
} ],
"org.keycloak.keys.KeyProvider" : [ {
"id" : "1001c8ce-edc2-4454-9358-6d9c4efafc6d",
"name" : "hmac-generated",
"providerId" : "hmac-generated",
"subComponents" : { },
"config" : {
"kid" : [ "ee359bdb-0e14-41be-996b-631521247eb5" ],
"secret" : [ "oTUy1tHmfrfzzXmWQhL5zeGdc1iigLuGHiZ-A3p-hT43ZXiSnGSFdzTRghyOOEH2p0D631pEUpn2mRhfx_gG-Q" ],
"priority" : [ "100" ],
"algorithm" : [ "HS256" ]
}
}, {
"id" : "4b5bfb78-cc0f-4ffa-aca5-6131578b6d6b",
"name" : "aes-generated",
"providerId" : "aes-generated",
"subComponents" : { },
"config" : {
"kid" : [ "edc7a5cc-8b52-4c8a-b3d7-3fc2ce4230b8" ],
"secret" : [ "efeeTjCAYUPBYryHpxqJ2g" ],
"priority" : [ "100" ]
}
}, {
"id" : "4ac2b4b3-ab55-4500-bbdc-5559afc527d0",
"name" : "rsa-generated",
"providerId" : "rsa-generated",
"subComponents" : { },
"config" : {
"privateKey" : [ "MIIEowIBAAKCAQEAnWvdd18SZT4aNLdw7b3vo1o6TbM1VZbXcYi7pI1NvI2jxUqHNLO/1LJAqbCBxOO6oXKY36zlHHFz8ItoQQ5xOozspjy4onuw/HuBweg81dbS9VKhBNSV9pp/BCYjDrlrUOOgSkKNZ5EkxBDdJk3IrXG0dP6FzzLewIVZAklg+dZLgbyb6XPadeDfcmN+bAVvSTt4hOhg304BSSgV1Pt2ajFWEC2OAqZho2Msqo98Qk8tw+N+WTbplATK7PO57apbaKvsmQrj4eipOJobPlvgs+Kdj9bKtLJhOSOCIL+ssmdto/MgBr4NI1aWZUGrmCZUHFpT7U4AjGIS1Wi9W0aiowIDAQABAoIBAEpz/aa7nGOt348XQ53tuy0zO2gMXilA0lysIrNM8XtAMjjZauEOMqhSNisLhBSu8FHzdUI075doQUF/bat3PS5IAJUPGvQeNDL15wTi5gLtO5Ezp1w1f0fHAlPgBaytHYiAYAs/NsnI5+6jWzUGjOcbZBIBXyAEGz5K0zI1qlv+tFheRe6lTGMoIe9qy/JQSGgnnCAh9JfZFkIhBhciZmEEuRI26PKh7kc6eA20oZ9JDO5FD+J6vBBf56h3NVP2GDJAXWhSE+g22OG9RC2BKG8itDAfdi0GdFf2XC7MuLOOoPKjXHUowTivy28Oi/vWrFv9t1vntOMAI+GcHYSl7YECgYEA0iDolEo9CgWKkqdZd4u6+Mq+sTDudLTHc+Y4DYdwhi+GaqNigzg1z5sWp9Q29tiwGkc/3Qm5KNhz2No9X96phY+r7yykguntz5p7fnEEBBta/DfdLazG3Jp6Jj3aTTPpUDB1Xx2hyiFY+9DcfZohVWHJM+oTnJhBQay94rAIOHECgYEAv8lmdjAFAMzvJqPAsOfroCZHntxEi8if37hPV0q7Bu4YrsdYrTf3DfnSnryJ4h0eqVAn0xE6kZBazGiM8TUh1mgLIEV0QJLuc8tULpHEb83bnVsdzWzoTVzdD1TD8bYhtS1rD/Zyd6f1LbNmcWZtDvXzDPhd5e4S82+yKZY8tlMCgYAdD8AbAkl+4VVRAyQ0jHbHggLtrr7MFVSgiu6lsF23sUr95KrzSwrmM6TmgUs4yK9Scxg6EeYx5/3duBFU+Q6pEj3NTndSQ9hIJi1+R1Mu3jmvOGq2rnayfAr4zwUqOEvEc29IQGjn88TCzxgvpumFTYjuTSl5NvWPh7ybZY09gQKBgQCyUclx5G4Sc3l8/M6h7dF4g38eJwGY0r5LniwvJq3E4MaUY4eA70NHfFwn+XdehOLIXF3a8u74/zZdTmyVrWg72VtW8x0HGVaa1Zf9AM2bgtVKdri8EyHfJJPpuE/DwyuOMJ+WJPgDZ2ggyOhcUfbe7THCgn+T1QtLyzPlVOo4PwKBgBSO+DefTXtyqaYXJNUuxfrpU97dS3cnyXKI7dyZZebb5oguQ0vhRzEuhDTAhDy3sYphJEFAj/l/DRt6rsxRR2NLMEspf9QwroTu3+24iM8hfJLtiMw0yebyWtdGXDEviHEGwAegh0hWAU56qeC+Bh5r9oEguBI/AXlKrQAQtgWp" ],
"certificate" : [ "MIICmzCCAYMCBgFwouzjLjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZtYXN0ZXIwHhcNMjAwMzA0MDAyMTM4WhcNMzAwMzA0MDAyMzE4WjARMQ8wDQYDVQQDDAZtYXN0ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCda913XxJlPho0t3Dtve+jWjpNszVVltdxiLukjU28jaPFSoc0s7/UskCpsIHE47qhcpjfrOUccXPwi2hBDnE6jOymPLiie7D8e4HB6DzV1tL1UqEE1JX2mn8EJiMOuWtQ46BKQo1nkSTEEN0mTcitcbR0/oXPMt7AhVkCSWD51kuBvJvpc9p14N9yY35sBW9JO3iE6GDfTgFJKBXU+3ZqMVYQLY4CpmGjYyyqj3xCTy3D435ZNumUBMrs87ntqltoq+yZCuPh6Kk4mhs+W+Cz4p2P1sq0smE5I4Igv6yyZ22j8yAGvg0jVpZlQauYJlQcWlPtTgCMYhLVaL1bRqKjAgMBAAEwDQYJKoZIhvcNAQELBQADggEBADDgAkiXWmA5ZjOinlN6xRjI96FU4K1nSDfHgeKUBAmEoAsVoaoVraVYrx6JfDpQ6lCKL2MVnJX/fRNOleKMNNsdexwCfbHvCVci09dOLWsEudUQiBegkabipWEmwX11NeGL+tJCcWZZ30hU6PvP7xT+GPLPW2+BTjErGMOwt41zr12XaCJ72bB0I5Bmj2dpWPmScXfFd50mdanyDUUKJQgQ5U4BV+GYAPtyAHGehgHFIgMTso+wgXtNNGS+6eqr6criIRaEllK0X0tlVx83gpYvXua6xqEEYwwqpyOyKq77ypZfDbUkesCPORuLpxs4NmJecCMcQTkPzlgVGlO7QHo=" ],
"priority" : [ "100" ]
}
} ]
},
"internationalizationEnabled" : false,
"supportedLocales" : [ ],
"authenticationFlows" : [ {
"id" : "4009ed69-04e1-451c-82bd-f806d6bcf66d",
"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",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 20,
"flowAlias" : "Verify Existing Account by Re-authentication",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "143eecef-2ab2-4ec8-be0d-5489b3f468bd",
"alias" : "Authentication Options",
"description" : "Authentication options.",
"providerId" : "basic-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "basic-auth",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "basic-auth-otp",
"requirement" : "DISABLED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-spnego",
"requirement" : "DISABLED",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "a3a0aa6d-0671-46c6-a9e4-b33e8fc5ae9f",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-otp-form",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "849aa284-08bf-4b80-ab0b-bc4e2ed69032",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "direct-grant-validate-otp",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "8200cd7b-1ca5-4c78-92de-31b62ff95217",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-otp-form",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "24242156-b37c-4d61-ad8c-bb4e9f6307d5",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "Account verification options",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "8ec04d5a-f7ed-4488-a2e5-293e9b5a5be3",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-otp",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "59a0d622-1c3c-4d76-bfbd-56eae4990770",
"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",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 20,
"flowAlias" : "Handle Existing Account",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "b4e38768-96f2-4d1b-b371-72b00fc86455",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 20,
"flowAlias" : "First broker login - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "013c6b8f-05a0-4dc2-bfac-cea2f3edf485",
"alias" : "browser",
"description" : "browser based authentication",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "auth-cookie",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-spnego",
"requirement" : "DISABLED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "identity-provider-redirector",
"requirement" : "ALTERNATIVE",
"priority" : 25,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 30,
"flowAlias" : "forms",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "3bf1a4a6-809c-49cc-82f8-fbd4be962291",
"alias" : "clients",
"description" : "Base authentication for clients",
"providerId" : "client-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "client-secret",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-jwt",
"requirement" : "ALTERNATIVE",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-secret-jwt",
"requirement" : "ALTERNATIVE",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-x509",
"requirement" : "ALTERNATIVE",
"priority" : 40,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "0fa8cf72-1c57-49e7-88dc-b73bd12eef54",
"alias" : "direct grant",
"description" : "OpenID Connect Resource Owner Grant",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "direct-grant-validate-username",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "direct-grant-validate-password",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 30,
"flowAlias" : "Direct Grant - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "dccf7e73-dbe9-437e-b228-ec3e5cebb63a",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "c1b31012-996f-4921-abac-5abd50796a68",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "User creation or linking",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "9db37d4e-5681-412c-b2c6-88fdf2345b2f",
"alias" : "forms",
"description" : "Username, password, otp and other auth forms.",
"providerId" : "basic-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "auth-username-password-form",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 20,
"flowAlias" : "Browser - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "d1580af4-bd97-4304-9051-135a0974e170",
"alias" : "http challenge",
"description" : "An authentication flow based on challenge-response HTTP Authentication Schemes",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "no-cookie-redirect",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "Authentication Options",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "fad7a149-aa5a-419f-ac1b-e1a9d00e71cc",
"alias" : "registration",
"description" : "registration flow",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "registration-page-form",
"requirement" : "REQUIRED",
"priority" : 10,
"flowAlias" : "registration form",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "5f60c655-938f-47cf-bbb6-8e58c7c58dea",
"alias" : "registration form",
"description" : "registration form",
"providerId" : "form-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "registration-user-creation",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-profile-action",
"requirement" : "REQUIRED",
"priority" : 40,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-password-action",
"requirement" : "REQUIRED",
"priority" : 50,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-recaptcha-action",
"requirement" : "DISABLED",
"priority" : 60,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "8729e507-85a4-429b-91b7-7ae0c31751c0",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-credential-email",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-password",
"requirement" : "REQUIRED",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 40,
"flowAlias" : "Reset - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "e6a98610-5405-42fc-9975-b764b9f4b349",
"alias" : "saml ecp",
"description" : "SAML ECP Profile Authentication Flow",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "http-basic-authenticator",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
} ],
"authenticatorConfig" : [ {
"id" : "6dda5be6-9fb1-4a54-a336-bd4f2e5d9bae",
"alias" : "create unique user config",
"config" : {
"require.password.update.after.registration" : "false"
}
}, {
"id" : "b085d94e-bdbc-48a5-a58d-d58260f0e28e",
"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" : "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",
"attributes" : {
"clientSessionIdleTimeout" : "0",
"clientSessionMaxLifespan" : "0"
},
"keycloakVersion" : "11.0.3",
"userManagedAccessAllowed" : false
}
================================================
FILE: _resources/demo-config/import-dir/master-users-0.json
================================================
{
"realm" : "master",
"users" : [ {
"id" : "360eec39-361b-4e59-99d8-cd00fd954545",
"createdTimestamp" : 1583281400706,
"username" : "admin",
"enabled" : true,
"totp" : false,
"emailVerified" : false,
"firstName" : "Admin",
"lastName" : "FamilyName",
"email" : "admin@placeholder.com",
"credentials" : [ {
"id" : "282dff34-5b1b-4a92-85be-42a8819a574f",
"type" : "password",
"createdDate" : 1583281400761,
"secretData" : "{\"value\":\"FqwfKQFxGscUXOFLTNfk81z7V8A/u/eO4gbVon+vQPW8yVJwTv11qKuMH1VlhPhsBcgZB94+ZSo/ImcIIjGCiA==\",\"salt\":\"xZHReUwZrCg8XoXgG2XMQg==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "admin", "uma_authorization", "offline_access" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
} ]
}
================================================
FILE: _resources/demo-config/import-dir/placeholder-realm.json
================================================
{
"id" : "placeholder",
"realm" : "placeholder",
"notBefore" : 0,
"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,
"enabled" : true,
"sslRequired" : "external",
"registrationAllowed" : true,
"registrationEmailAsUsername" : false,
"rememberMe" : true,
"verifyEmail" : true,
"loginWithEmailAllowed" : true,
"duplicateEmailsAllowed" : false,
"resetPasswordAllowed" : true,
"editUsernameAllowed" : true,
"bruteForceProtected" : false,
"permanentLockout" : false,
"maxFailureWaitSeconds" : 900,
"minimumQuickLoginWaitSeconds" : 60,
"waitIncrementSeconds" : 60,
"quickLoginCheckMilliSeconds" : 1000,
"maxDeltaTimeSeconds" : 43200,
"failureFactor" : 30,
"roles" : {
"realm" : [ {
"id" : "bce8eb39-ee03-478a-98a6-98740b9db4aa",
"name" : "offline_access",
"description" : "${role_offline-access}",
"composite" : false,
"clientRole" : false,
"containerId" : "placeholder",
"attributes" : { }
}, {
"id" : "958df5fa-4db3-4ab8-9f12-fc4ae41b2a86",
"name" : "product_view",
"composite" : false,
"clientRole" : false,
"containerId" : "placeholder",
"attributes" : { }
}, {
"id" : "4a5441d2-299a-4c8d-b8c9-7096cb4c0e3e",
"name" : "uma_authorization",
"composite" : false,
"clientRole" : false,
"containerId" : "placeholder",
"attributes" : { }
} ],
"client" : {
"client-one" : [ ],
"realm-management" : [ {
"id" : "ab427a53-49c2-499e-8b8f-68a0c7b10229",
"name" : "manage-events",
"description" : "${role_manage-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "ecc15126-12f7-4d63-b2d4-d67d684a3159",
"name" : "view-identity-providers",
"description" : "${role_view-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "6c959a27-7e63-40f2-bd52-d88e4fc71a50",
"name" : "manage-realm",
"description" : "${role_manage-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "fe81e3e4-fff6-4ea5-ba32-33841155d685",
"name" : "manage-identity-providers",
"description" : "${role_manage-identity-providers}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "c2717c7c-84a3-4beb-a3b2-ec1f68a96ab1",
"name" : "impersonation",
"description" : "${role_impersonation}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "2685b41b-598c-4370-a18f-4f6a8b41ffe6",
"name" : "query-users",
"description" : "${role_query-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "dc2c8f82-b8a4-4015-82de-8d8129ea593f",
"name" : "view-realm",
"description" : "${role_view-realm}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "df02eadd-797c-41bd-86fb-e367a0f1a66b",
"name" : "view-events",
"description" : "${role_view-events}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "01d738ad-e3e0-451d-9726-8786967b082d",
"name" : "query-clients",
"description" : "${role_query-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "a94beb0d-201d-4e15-ac1e-0e3fed4e98ad",
"name" : "query-groups",
"description" : "${role_query-groups}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "0977d87f-5dee-4f30-8241-6f250cd61861",
"name" : "view-users",
"description" : "${role_view-users}",
"composite" : true,
"composites" : {
"client" : {
"realm-management" : [ "query-users", "query-groups" ]
}
},
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "c9e03290-3c4c-4df0-aefb-1c8be662a16f",
"name" : "manage-clients",
"description" : "${role_manage-clients}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "fe8785cb-4168-4529-8893-6a1262db260c",
"name" : "realm-admin",
"description" : "${role_realm-admin}",
"composite" : true,
"composites" : {
"client" : {
"realm-management" : [ "manage-events", "view-identity-providers", "manage-realm", "manage-identity-providers", "impersonation", "query-users", "view-realm", "view-events", "query-clients", "query-groups", "view-users", "manage-clients", "view-clients", "create-client", "query-realms", "manage-users", "view-authorization", "manage-authorization" ]
}
},
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "2e0c9334-946e-474a-95fc-3887a2142475",
"name" : "view-clients",
"description" : "${role_view-clients}",
"composite" : true,
"composites" : {
"client" : {
"realm-management" : [ "query-clients" ]
}
},
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "101350d6-349c-42b4-a0fa-00387f255f19",
"name" : "create-client",
"description" : "${role_create-client}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "19048943-9626-4145-8d9c-aa76fbe82ec3",
"name" : "query-realms",
"description" : "${role_query-realms}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "5c7da431-415a-432b-a00a-01a17f97dcf1",
"name" : "manage-users",
"description" : "${role_manage-users}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "da051020-ca93-4be1-839d-4828bad810b0",
"name" : "view-authorization",
"description" : "${role_view-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
}, {
"id" : "c8e46741-7bb4-4af3-b5ff-f5e20574ba4d",
"name" : "manage-authorization",
"description" : "${role_manage-authorization}",
"composite" : false,
"clientRole" : true,
"containerId" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"attributes" : { }
} ],
"security-admin-console" : [ ],
"admin-cli" : [ ],
"account-console" : [ ],
"broker" : [ {
"id" : "0ec1d0fc-ef5e-4d31-9f16-4035100fb194",
"name" : "read-token",
"description" : "${role_read-token}",
"composite" : false,
"clientRole" : true,
"containerId" : "89a7dee6-eaec-400b-a421-2b8c4f5820c8",
"attributes" : { }
} ],
"account" : [ {
"id" : "35bd2bb0-1cc7-4abf-b90e-fa7923f947c6",
"name" : "manage-account",
"description" : "${role_manage-account}",
"composite" : true,
"composites" : {
"client" : {
"account" : [ "manage-account-links" ]
}
},
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
}, {
"id" : "f6b1721f-783e-45ac-96bf-776711bc2671",
"name" : "manage-consent",
"description" : "${role_manage-consent}",
"composite" : true,
"composites" : {
"client" : {
"account" : [ "view-consent" ]
}
},
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
}, {
"id" : "7e6b226a-8117-4612-8808-6f58e772e69b",
"name" : "manage-account-links",
"description" : "${role_manage-account-links}",
"composite" : false,
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
}, {
"id" : "786546eb-066f-481d-9ddd-55202f2db004",
"name" : "view-applications",
"description" : "${role_view-applications}",
"composite" : false,
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
}, {
"id" : "6b2e1fcb-0b99-41e2-b5fd-31c4dfad9957",
"name" : "view-profile",
"description" : "${role_view-profile}",
"composite" : false,
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
}, {
"id" : "3036f708-692b-4e92-a530-5cdabeae42ae",
"name" : "view-consent",
"description" : "${role_view-consent}",
"composite" : false,
"clientRole" : true,
"containerId" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"attributes" : { }
} ],
"client-two" : [ ]
}
},
"groups" : [ ],
"defaultRoles" : [ "offline_access", "uma_authorization" ],
"requiredCredentials" : [ "password" ],
"otpPolicyType" : "totp",
"otpPolicyAlgorithm" : "HmacSHA1",
"otpPolicyInitialCounter" : 0,
"otpPolicyDigits" : 6,
"otpPolicyLookAheadWindow" : 1,
"otpPolicyPeriod" : 30,
"otpSupportedApplications" : [ "FreeOTP", "Google Authenticator" ],
"webAuthnPolicyRpEntityName" : "keycloak",
"webAuthnPolicySignatureAlgorithms" : [ "ES256" ],
"webAuthnPolicyRpId" : "",
"webAuthnPolicyAttestationConveyancePreference" : "not specified",
"webAuthnPolicyAuthenticatorAttachment" : "not specified",
"webAuthnPolicyRequireResidentKey" : "not specified",
"webAuthnPolicyUserVerificationRequirement" : "not specified",
"webAuthnPolicyCreateTimeout" : 0,
"webAuthnPolicyAvoidSameAuthenticatorRegister" : false,
"webAuthnPolicyAcceptableAaguids" : [ ],
"webAuthnPolicyPasswordlessRpEntityName" : "keycloak",
"webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ],
"webAuthnPolicyPasswordlessRpId" : "",
"webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified",
"webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified",
"webAuthnPolicyPasswordlessRequireResidentKey" : "not specified",
"webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified",
"webAuthnPolicyPasswordlessCreateTimeout" : 0,
"webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false,
"webAuthnPolicyPasswordlessAcceptableAaguids" : [ ],
"scopeMappings" : [ {
"clientScope" : "offline_access",
"roles" : [ "offline_access" ]
} ],
"clientScopeMappings" : {
"account" : [ {
"client" : "account-console",
"roles" : [ "manage-account" ]
} ]
},
"clients" : [ {
"id" : "035f0e3a-8feb-454b-8bee-36b14bf71dff",
"clientId" : "account",
"name" : "${client_account}",
"rootUrl" : "${authBaseUrl}",
"baseUrl" : "/realms/placeholder/account/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "d6162565-2302-4b44-a940-41d773838d34",
"defaultRoles" : [ "manage-account", "view-profile" ],
"redirectUris" : [ "/realms/placeholder/account/*" ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"protocolMappers" : [ {
"id" : "3bc3c992-954c-4dc1-a5e5-3dc493628d54",
"name" : "locale",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "locale",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "locale",
"jsonType.label" : "String"
}
} ],
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
}, {
"id" : "27ba8ed2-2413-4962-ad01-b22dc8109058",
"clientId" : "account-console",
"name" : "${client_account-console}",
"rootUrl" : "${authBaseUrl}",
"baseUrl" : "/realms/placeholder/account/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "31348d01-14ea-43ff-9eeb-8b5702d5c68a",
"redirectUris" : [ "/realms/placeholder/account/*" ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"pkce.code.challenge.method" : "S256"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"protocolMappers" : [ {
"id" : "c2fc2d66-210e-4159-8128-1e8e85e4ac73",
"name" : "audience resolve",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-audience-resolve-mapper",
"consentRequired" : false,
"config" : { }
} ],
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
}, {
"id" : "7a667c5f-3de1-42a6-a45a-8240708c55a0",
"clientId" : "admin-cli",
"name" : "${client_admin-cli}",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "32e9a3e2-1551-4676-bfa3-4a65c436437e",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : false,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : true,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
}, {
"id" : "89a7dee6-eaec-400b-a421-2b8c4f5820c8",
"clientId" : "broker",
"name" : "${client_broker}",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "34fc35ae-72c5-4ce6-bb88-3ae68ee99a9c",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
}, {
"id" : "414f30fe-20e1-47e7-b33e-eb047dc19aa3",
"clientId" : "client-one",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "5683062e-9a7c-4146-9232-f2d43e46f57c",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : false,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : true,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"saml.assertion.signature" : "false",
"saml.force.post.binding" : "false",
"saml.multivalued.roles" : "false",
"saml.encrypt" : "false",
"saml.server.signature" : "false",
"saml.server.signature.keyinfo.ext" : "false",
"exclude.session.state.from.auth.response" : "false",
"saml_force_name_id_format" : "false",
"saml.client.signature" : "false",
"tls.client.certificate.bound.access.tokens" : "false",
"saml.authnstatement" : "false",
"display.on.consent.screen" : "false",
"saml.onetimeuse.condition" : "false"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : true,
"nodeReRegistrationTimeout" : -1,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "762a3d0b-f943-46c5-9cda-feefe5be29f8",
"clientId" : "client-two",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "03dc125a-8820-4529-88aa-48d70f04bb39",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : false,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : true,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"saml.assertion.signature" : "false",
"saml.force.post.binding" : "false",
"saml.multivalued.roles" : "false",
"saml.encrypt" : "false",
"saml.server.signature" : "false",
"saml.server.signature.keyinfo.ext" : "false",
"exclude.session.state.from.auth.response" : "false",
"saml_force_name_id_format" : "false",
"saml.client.signature" : "false",
"tls.client.certificate.bound.access.tokens" : "false",
"saml.authnstatement" : "false",
"display.on.consent.screen" : "false",
"saml.onetimeuse.condition" : "false"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : true,
"nodeReRegistrationTimeout" : -1,
"defaultClientScopes" : [ "web-origins", "role_list", "profile", "roles", "email" ],
"optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
}, {
"id" : "6058c1cb-b593-4eb7-884c-5c4f5aad2782",
"clientId" : "realm-management",
"name" : "${client_realm-management}",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "d566a0e5-0f00-4769-b30e-d5aa0b2ac153",
"redirectUris" : [ ],
"webOrigins" : [ ],
"notBefore" : 0,
"bearerOnly" : true,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : false,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : { },
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
}, {
"id" : "1f147d69-6d4c-4820-9cf1-887b7cd2f7de",
"clientId" : "security-admin-console",
"name" : "${client_security-admin-console}",
"rootUrl" : "${authAdminUrl}",
"baseUrl" : "/admin/placeholder/console/",
"surrogateAuthRequired" : false,
"enabled" : true,
"alwaysDisplayInConsole" : false,
"clientAuthenticatorType" : "client-secret",
"secret" : "ce562a89-33ce-4b1a-ab54-a5971bed722b",
"redirectUris" : [ "/admin/placeholder/console/*" ],
"webOrigins" : [ "+" ],
"notBefore" : 0,
"bearerOnly" : false,
"consentRequired" : false,
"standardFlowEnabled" : true,
"implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false,
"publicClient" : true,
"frontchannelLogout" : false,
"protocol" : "openid-connect",
"attributes" : {
"pkce.code.challenge.method" : "S256"
},
"authenticationFlowBindingOverrides" : { },
"fullScopeAllowed" : false,
"nodeReRegistrationTimeout" : 0,
"protocolMappers" : [ {
"id" : "afa2de77-fb53-47f6-b398-c0b5aac5bbe1",
"name" : "locale",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "locale",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "locale",
"jsonType.label" : "String"
}
} ],
"defaultClientScopes" : [ ],
"optionalClientScopes" : [ ]
} ],
"clientScopes" : [ {
"id" : "9bec96af-fec6-4d3c-a2e8-d4de5fe2f7f4",
"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" : "1b220a08-8608-42a7-a406-c6c3d1594f38",
"name" : "role_list",
"description" : "SAML role list",
"protocol" : "saml",
"attributes" : {
"consent.screen.text" : "${samlRoleListScopeConsentText}",
"display.on.consent.screen" : "true"
},
"protocolMappers" : [ {
"id" : "b281672a-bc4c-408e-b064-b296da3dfc82",
"name" : "role list",
"protocol" : "saml",
"protocolMapper" : "saml-role-list-mapper",
"consentRequired" : false,
"config" : {
"single" : "false",
"attribute.nameformat" : "Basic",
"attribute.name" : "Role"
}
} ]
}, {
"id" : "beb0295d-3c41-466a-96b9-73edab644370",
"name" : "profile",
"description" : "OpenID Connect built-in scope: profile",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${profileScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "be223d79-9b39-4241-a49c-d1b257cb2e8d",
"name" : "username",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "username",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "preferred_username",
"jsonType.label" : "String"
}
}, {
"id" : "ae5d8188-b209-4ca0-98ae-62baddfa213a",
"name" : "gender",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "gender",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "gender",
"jsonType.label" : "String"
}
}, {
"id" : "6e9c4b36-ade0-48a2-817c-73918021bb64",
"name" : "website",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "website",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "website",
"jsonType.label" : "String"
}
}, {
"id" : "ce850f7c-6996-4436-bb6a-0e7e5a6d3469",
"name" : "given name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "firstName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "given_name",
"jsonType.label" : "String"
}
}, {
"id" : "928525e3-9926-43ee-8093-84041b7a2a2c",
"name" : "full name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-full-name-mapper",
"consentRequired" : false,
"config" : {
"id.token.claim" : "true",
"access.token.claim" : "true",
"userinfo.token.claim" : "true"
}
}, {
"id" : "907ce0c0-9e3b-4eae-b29a-b7c1b7dcf8e4",
"name" : "locale",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "locale",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "locale",
"jsonType.label" : "String"
}
}, {
"id" : "c86a59f4-ef8f-4236-b428-4002ebbeff8e",
"name" : "middle name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "middleName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "middle_name",
"jsonType.label" : "String"
}
}, {
"id" : "50470a3b-a789-4fbe-9da4-80d3c4c9167d",
"name" : "family name",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "lastName",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "family_name",
"jsonType.label" : "String"
}
}, {
"id" : "a7f7c9fe-ed4a-4b81-86c4-96300e413267",
"name" : "nickname",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "nickname",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "nickname",
"jsonType.label" : "String"
}
}, {
"id" : "799334e8-4e25-425d-96b1-93ff004d2dd1",
"name" : "picture",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "picture",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "picture",
"jsonType.label" : "String"
}
}, {
"id" : "592805dd-1fe3-4b64-a96f-f7b1cc1b5a20",
"name" : "updated at",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "updatedAt",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "updated_at",
"jsonType.label" : "String"
}
}, {
"id" : "ac618b58-78db-4968-b8f4-79263c6798d0",
"name" : "profile",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "profile",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "profile",
"jsonType.label" : "String"
}
}, {
"id" : "ce933219-296f-4b34-a5b3-4a6b9bf03182",
"name" : "zoneinfo",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "zoneinfo",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "zoneinfo",
"jsonType.label" : "String"
}
}, {
"id" : "1bcfb9f2-c149-4e24-b923-9d78f5e2a5c1",
"name" : "birthdate",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "birthdate",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "birthdate",
"jsonType.label" : "String"
}
} ]
}, {
"id" : "8bf9495d-0087-438c-bd63-b1736cce5e35",
"name" : "email",
"description" : "OpenID Connect built-in scope: email",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${emailScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "35cab8d6-8b89-408f-92c9-726638d83102",
"name" : "email",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "email",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "email",
"jsonType.label" : "String"
}
}, {
"id" : "f07a5630-4fc8-48e0-886b-7e060bc612b2",
"name" : "email verified",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "emailVerified",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "email_verified",
"jsonType.label" : "boolean"
}
} ]
}, {
"id" : "9483c8a3-8355-4cb2-bf78-3b0a02ab7722",
"name" : "address",
"description" : "OpenID Connect built-in scope: address",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${addressScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "dc281994-a333-4bf9-9291-200b24290aaf",
"name" : "address",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-address-mapper",
"consentRequired" : false,
"config" : {
"user.attribute.formatted" : "formatted",
"user.attribute.country" : "country",
"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" : "3a6eae67-25f9-4024-9b5c-75b089921c7a",
"name" : "phone",
"description" : "OpenID Connect built-in scope: phone",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "true",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${phoneScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "a837d821-0614-486a-832e-c5c62547c390",
"name" : "phone number",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "phoneNumber",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "phone_number",
"jsonType.label" : "String"
}
}, {
"id" : "17d424c0-3d00-47b2-bd93-4fe7eb6bc96e",
"name" : "phone number verified",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-attribute-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "phoneNumberVerified",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "phone_number_verified",
"jsonType.label" : "boolean"
}
} ]
}, {
"id" : "70f7e6ef-373c-4484-82ae-e0b68c49b474",
"name" : "roles",
"description" : "OpenID Connect scope for add user roles to the access token",
"protocol" : "openid-connect",
"attributes" : {
"include.in.token.scope" : "false",
"display.on.consent.screen" : "true",
"consent.screen.text" : "${rolesScopeConsentText}"
},
"protocolMappers" : [ {
"id" : "10e277e8-c6fc-47af-be7b-6d8706875118",
"name" : "audience resolve",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-audience-resolve-mapper",
"consentRequired" : false,
"config" : { }
}, {
"id" : "b72cd061-fcc4-49d0-80f7-9c8cfdc7c271",
"name" : "realm roles",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-realm-role-mapper",
"consentRequired" : false,
"config" : {
"user.attribute" : "foo",
"access.token.claim" : "true",
"claim.name" : "realm_access.roles",
"jsonType.label" : "String",
"multivalued" : "true"
}
}, {
"id" : "b76bd42a-084f-45b0-bdaa-bb4c0ca29579",
"name" : "client roles",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-client-role-mapper",
"consentRequired" : false,
"config" : {
"user.attribute" : "foo",
"access.token.claim" : "true",
"claim.name" : "resource_access.${client_id}.roles",
"jsonType.label" : "String",
"multivalued" : "true"
}
} ]
}, {
"id" : "dbdca642-5d4f-4e37-a1a3-f7e94565f38f",
"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",
"display.on.consent.screen" : "false",
"consent.screen.text" : ""
},
"protocolMappers" : [ {
"id" : "51cbfba6-c784-4e2a-a26e-c91ba72c2426",
"name" : "allowed web origins",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-allowed-origins-mapper",
"consentRequired" : false,
"config" : { }
} ]
}, {
"id" : "9658b764-096c-4f52-838f-820dc0715952",
"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" : "0dc87fc7-49de-41cb-b8af-f7fae47c16c1",
"name" : "upn",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-property-mapper",
"consentRequired" : false,
"config" : {
"userinfo.token.claim" : "true",
"user.attribute" : "username",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "upn",
"jsonType.label" : "String"
}
}, {
"id" : "087394f0-d21b-4c81-bdc6-6525a8ff1d9c",
"name" : "groups",
"protocol" : "openid-connect",
"protocolMapper" : "oidc-usermodel-realm-role-mapper",
"consentRequired" : false,
"config" : {
"multivalued" : "true",
"userinfo.token.claim" : "true",
"user.attribute" : "foo",
"id.token.claim" : "true",
"access.token.claim" : "true",
"claim.name" : "groups",
"jsonType.label" : "String"
}
} ]
} ],
"defaultDefaultClientScopes" : [ "role_list", "profile", "email", "roles", "web-origins" ],
"defaultOptionalClientScopes" : [ "offline_access", "address", "phone", "microprofile-jwt" ],
"browserSecurityHeaders" : {
"contentSecurityPolicyReportOnly" : "",
"xContentTypeOptions" : "nosniff",
"xRobotsTag" : "none",
"xFrameOptions" : "SAMEORIGIN",
"contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
"xXSSProtection" : "1; mode=block",
"strictTransportSecurity" : "max-age=31536000; includeSubDomains"
},
"smtpServer" : {
"starttls" : "",
"auth" : "",
"port" : "1025",
"host" : "mailhog",
"from" : "noreply@placeholder.com",
"ssl" : ""
},
"eventsEnabled" : false,
"eventsListeners" : [ "jboss-logging", "pl_event_listener" ],
"enabledEventTypes" : [ "SEND_RESET_PASSWORD", "UPDATE_CONSENT_ERROR", "GRANT_CONSENT", "REMOVE_TOTP", "REVOKE_GRANT", "UPDATE_TOTP", "LOGIN_ERROR", "CLIENT_LOGIN", "RESET_PASSWORD_ERROR", "IMPERSONATE_ERROR", "CODE_TO_TOKEN_ERROR", "CUSTOM_REQUIRED_ACTION", "RESTART_AUTHENTICATION", "IMPERSONATE", "UPDATE_PROFILE_ERROR", "LOGIN", "UPDATE_PASSWORD_ERROR", "CLIENT_INITIATED_ACCOUNT_LINKING", "TOKEN_EXCHANGE", "LOGOUT", "REGISTER", "CLIENT_REGISTER", "IDENTITY_PROVIDER_LINK_ACCOUNT", "UPDATE_PASSWORD", "CLIENT_DELETE", "FEDERATED_IDENTITY_LINK_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN", "CLIENT_DELETE_ERROR", "VERIFY_EMAIL", "CLIENT_LOGIN_ERROR", "RESTART_AUTHENTICATION_ERROR", "EXECUTE_ACTIONS", "REMOVE_FEDERATED_IDENTITY_ERROR", "TOKEN_EXCHANGE_ERROR", "PERMISSION_TOKEN", "SEND_IDENTITY_PROVIDER_LINK_ERROR", "EXECUTE_ACTION_TOKEN_ERROR", "SEND_VERIFY_EMAIL", "EXECUTE_ACTIONS_ERROR", "REMOVE_FEDERATED_IDENTITY", "IDENTITY_PROVIDER_POST_LOGIN", "IDENTITY_PROVIDER_LINK_ACCOUNT_ERROR", "UPDATE_EMAIL", "REGISTER_ERROR", "REVOKE_GRANT_ERROR", "EXECUTE_ACTION_TOKEN", "LOGOUT_ERROR", "UPDATE_EMAIL_ERROR", "CLIENT_UPDATE_ERROR", "UPDATE_PROFILE", "CLIENT_REGISTER_ERROR", "FEDERATED_IDENTITY_LINK", "SEND_IDENTITY_PROVIDER_LINK", "SEND_VERIFY_EMAIL_ERROR", "RESET_PASSWORD", "CLIENT_INITIATED_ACCOUNT_LINKING_ERROR", "UPDATE_CONSENT", "REMOVE_TOTP_ERROR", "VERIFY_EMAIL_ERROR", "SEND_RESET_PASSWORD_ERROR", "CLIENT_UPDATE", "CUSTOM_REQUIRED_ACTION_ERROR", "IDENTITY_PROVIDER_POST_LOGIN_ERROR", "UPDATE_TOTP_ERROR", "CODE_TO_TOKEN", "GRANT_CONSENT_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN_ERROR" ],
"adminEventsEnabled" : false,
"adminEventsDetailsEnabled" : false,
"components" : {
"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ {
"id" : "1b20bb08-8d09-429e-a591-b992b7d8582e",
"name" : "Allowed Client Scopes",
"providerId" : "allowed-client-templates",
"subType" : "authenticated",
"subComponents" : { },
"config" : {
"allow-default-scopes" : [ "true" ]
}
}, {
"id" : "e1a3f4cc-0805-43fd-8b53-f5b5e95adab2",
"name" : "Consent Required",
"providerId" : "consent-required",
"subType" : "anonymous",
"subComponents" : { },
"config" : { }
}, {
"id" : "cab43553-8829-4040-93e2-f27743db52bd",
"name" : "Max Clients Limit",
"providerId" : "max-clients",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"max-clients" : [ "200" ]
}
}, {
"id" : "243f4ff8-d691-49ba-9cb5-fc024a038c15",
"name" : "Allowed Protocol Mapper Types",
"providerId" : "allowed-protocol-mappers",
"subType" : "authenticated",
"subComponents" : { },
"config" : {
"allowed-protocol-mapper-types" : [ "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper", "oidc-full-name-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "oidc-address-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper" ]
}
}, {
"id" : "cf828513-2f49-4003-964d-4fe6598f0160",
"name" : "Allowed Protocol Mapper Types",
"providerId" : "allowed-protocol-mappers",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-attribute-mapper", "oidc-address-mapper", "saml-role-list-mapper", "oidc-full-name-mapper", "saml-user-property-mapper", "oidc-usermodel-property-mapper" ]
}
}, {
"id" : "a50d008c-7c51-48cf-9f8b-9532bc3699f7",
"name" : "Trusted Hosts",
"providerId" : "trusted-hosts",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"host-sending-registration-request-must-match" : [ "true" ],
"client-uris-must-match" : [ "true" ]
}
}, {
"id" : "20140829-f20b-4dee-b423-ebfd488a5dee",
"name" : "Full Scope Disabled",
"providerId" : "scope",
"subType" : "anonymous",
"subComponents" : { },
"config" : { }
}, {
"id" : "691c39de-0a7d-4b05-829c-acf644110035",
"name" : "Allowed Client Scopes",
"providerId" : "allowed-client-templates",
"subType" : "anonymous",
"subComponents" : { },
"config" : {
"allow-default-scopes" : [ "true" ]
}
} ],
"org.keycloak.keys.KeyProvider" : [ {
"id" : "613f4d6a-7960-4cdb-8334-cd2316bf3d35",
"name" : "aes-generated",
"providerId" : "aes-generated",
"subComponents" : { },
"config" : {
"kid" : [ "73d62105-fe3b-491e-8702-f9e251a47a35" ],
"secret" : [ "YaQYZ_cPYmWYY5OSkUO2JQ" ],
"priority" : [ "100" ]
}
}, {
"id" : "07d18a2a-fbb7-492d-9e12-c25bc950b5e0",
"name" : "hmac-generated",
"providerId" : "hmac-generated",
"subComponents" : { },
"config" : {
"kid" : [ "128b1ec0-1c31-4b6a-a8d5-d07dead51bc0" ],
"secret" : [ "_5bLqn-W9M9PFefWtE6EB4rU30hRVBZp3nLI7gu3re-gmC1W4TUq6NzO-EqtTysHdVdTuEa1mP0Wp348YdB_ew" ],
"priority" : [ "100" ],
"algorithm" : [ "HS256" ]
}
}, {
"id" : "0e4629c6-143e-4144-87d6-775183a341ae",
"name" : "rsa-generated",
"providerId" : "rsa-generated",
"subComponents" : { },
"config" : {
"privateKey" : [ "MIIEpAIBAAKCAQEAk7MRzDZibc4/z09lEWDFjN6aJ+nG0TSTTGImV2k0Hjd1QoHl6hqSE/5DYSj4dC/QrMYVxCo6Wh3NJ8BNp3ZGNMw82T78sg1bmM2Y1UB+UrGC0pztuFPUarjlrILuRgQn4aP1IsIhMu25QXg3iuc8ftbteLEKDgnOrLf63Uoj1HJflL4giiT6sbXX3POYwtqgOMeSDo/dRc7G3S+tFAdpdnm4m8cISM5wB3xLdkY1GMSHEAxwYmBisnOzox/FjGYmoQy/B2HroENMycdvCzy6hmsR/2DWvDKXqTpmr3LKiRfJpchTtlHy0WlETkaHsXJHXHPc9XMrPpI2/zlHQnl4YwIDAQABAoIBAGjdtB484se5r35+jXC4N6rcBbGe/wVcgdSyvyxCyrlFgODWn6oGcX72gVqDn1vG8y8oeR3NKZ8AF8BIfhoPFKu58t4AJaQ5bbZhC0klwErwM8VbnEDKbD/VxWQllg1qN/Kx2YNzN+UT+fts4mqh4UbhTLvrXws2lWH2QoxJboUQFy8OTvQMcn9p85MDodR/B/t6vog4zcyt75sVvHLXPcysUNlIrXzWDuxtIY32VN+Uts4MK8h3HKpR//FfC05qJweynY/Ob2/81+9h6/Ou+8M+RXbnoiaK4iDu5/IVzepnRLI1L6GEuWzNeSO4hnlVe8d2nZfbQPy9G4D5wWcq/LkCgYEAzDDBpcDdHECKzUoCQknv0VOzzv/X146yzGdv8Eb6MrPjKK9W4JKFWykji+bsxBMsJW6YTBUpOlvZ3Z36jkD+Nt97i5Qh4tKNpj+qVPa2rzd8IQdAvv3d0VoTTeXDZcuZmLRTj0+dPUwG4rBSI1zLW/9c/MFXQ6GQ077gD3HMAY8CgYEAuSztja7CovPuJgF1vLzFQwtJvqD5ctKPC4axPjm6g6LN22SJmg6GPWWfVG4gDG9CAJ7QIDRxHKI+6dAuNSKm/qOZ8Rd+Hq0Pll/Oa4vP3+jcJ5E1uaQrm291ZG5NmcO4SH5OVrF432+GzY3QgjpMkG/rZqbWQ9U+TSDnoheSCe0CgYEAiuVPlJTQ03sD8Ak76COrQlURpulZxYOIFIr4FhXx87Nx/ibnjfOdSxl82JnIzMfN69iDOJ3cYZpBZQMlgMatJl53B8dIFabsO/5qu0jnk+DGSyFH5aOC0/nVz9NPS1tnq/xeKsoZR60DsggGl49ztazLcBOEbLjmb2MTvu3Fu/kCgYEAoVeiC8bvU6gSIg83lKEthwL42B3N+tu3QyWynTMTbcqWbsgklJR/JlO7BYeGaQ8vhPbbBJRs0bQT+Qkomad9tXS6lrQPcY78e9syMcZ58vAjkl4VX5DJZf8xW7Y36vf7Qz655xNu689ytvsPZ8iAGYFKrABFxIiyZeV7rWG4HukCgYBgr8rHpMrWhga4QqLCbyhzVWJ9YSL4zBV6I6+IwYf+HCofbXb0+TVP5jgEQi+srVMPOXNxuVnBq6NcCk8yu12LsTrPZQkVXfDUej5S5LqxJ2y7L2pzUTW3bU0O5qnUpLKcNmwr8pgPqng7q3T0RR/6VUlYjjItxB8JhswR9obfOw==" ],
"certificate" : [ "MIIClzCCAX8CBgFwbo+Y0DANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARkZW1vMB4XDTIwMDIyMjIwMTkyOVoXDTMwMDIyMjIwMjEwOVowDzENMAsGA1UEAwwEZGVtbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOzEcw2Ym3OP89PZRFgxYzemifpxtE0k0xiJldpNB43dUKB5eoakhP+Q2Eo+HQv0KzGFcQqOlodzSfATad2RjTMPNk+/LINW5jNmNVAflKxgtKc7bhT1Gq45ayC7kYEJ+Gj9SLCITLtuUF4N4rnPH7W7XixCg4Jzqy3+t1KI9RyX5S+IIok+rG119zzmMLaoDjHkg6P3UXOxt0vrRQHaXZ5uJvHCEjOcAd8S3ZGNRjEhxAMcGJgYrJzs6MfxYxmJqEMvwdh66BDTMnHbws8uoZrEf9g1rwyl6k6Zq9yyokXyaXIU7ZR8tFpRE5Gh7FyR1xz3PVzKz6SNv85R0J5eGMCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAfMAQyqT2Vajrp25j0iNtOHtNuSRuiPVC5dodoc5B6EZdCzq2DedvIuHR1p9pDLtpAlUJXHtebdrUjcie6xsz1SID5FUCe0Wgw7rZ+PPSH2678AjiRow4PO0w6OVsi7M5v6F+PlDAseb03s0ANTEhzoUXnPxTrO7yFuGXqOrSyTuLmuxONmrPZJ4229K1bdXFGfgzK42iBx6JZU313yXJPar/K38bi6ruBV0FUH1DHeO+cNqEgAZZEGtkeYFnbBWioVH+ZRFr9XqMrwF4E6o4RE4KQq+AsOrCEjpHOzwSPONDMBh77pR/vR3Yiwcd9PKco9U1jpla7nKbchyKf92dqw==" ],
"priority" : [ "100" ]
}
} ]
},
"internationalizationEnabled" : true,
"supportedLocales" : [ "de", "en", "it", "fr", "es", "nl" ],
"defaultLocale" : "en",
"authenticationFlows" : [ {
"id" : "680ffd05-8824-494c-8a93-f222469b134b",
"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",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 20,
"flowAlias" : "Verify Existing Account by Re-authentication",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "4053540e-8bef-499c-9097-624dd8d837b5",
"alias" : "Authentication Options",
"description" : "Authentication options.",
"providerId" : "basic-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "basic-auth",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "basic-auth-otp",
"requirement" : "DISABLED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-spnego",
"requirement" : "DISABLED",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "b2f0234f-cce7-4bb5-9274-b8e74b411c88",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-otp-form",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "0ac11db8-4464-4059-926b-5442e53205ea",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "direct-grant-validate-otp",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "0e2ea316-53e8-47d2-954f-04fdbc016d1a",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-otp-form",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "1bf6420d-edc9-4a24-b5c3-79fc7f933d33",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "Account verification options",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "db2da303-3357-4de8-b274-69981b187118",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-otp",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "c48f2385-837c-40be-9b5d-80de7b9b46d0",
"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",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 20,
"flowAlias" : "Handle Existing Account",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "80e9a42a-1722-47fc-b8d6-ae0cdf7de65c",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 20,
"flowAlias" : "First broker login - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "f691c5da-c422-49c4-af96-24f242381826",
"alias" : "browser",
"description" : "browser based authentication",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "auth-cookie",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "auth-spnego",
"requirement" : "DISABLED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "identity-provider-redirector",
"requirement" : "ALTERNATIVE",
"priority" : 25,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "ALTERNATIVE",
"priority" : 30,
"flowAlias" : "forms",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "3573e206-29d4-4a7f-a617-f1eb715d0618",
"alias" : "clients",
"description" : "Base authentication for clients",
"providerId" : "client-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "client-secret",
"requirement" : "ALTERNATIVE",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-jwt",
"requirement" : "ALTERNATIVE",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-secret-jwt",
"requirement" : "ALTERNATIVE",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "client-x509",
"requirement" : "ALTERNATIVE",
"priority" : 40,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "eafabff0-2792-4699-a7b9-2139a3762afb",
"alias" : "direct grant",
"description" : "OpenID Connect Resource Owner Grant",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "direct-grant-validate-username",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "direct-grant-validate-password",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 30,
"flowAlias" : "Direct Grant - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "58a1588a-b766-4ea8-b7c6-6b8a4b6ba8e2",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "df96393e-ae0f-4d6f-8b83-0f2aefc4e271",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "User creation or linking",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "45c15ad1-d4cc-4a44-8110-5c49d87624cc",
"alias" : "forms",
"description" : "Username, password, otp and other auth forms.",
"providerId" : "basic-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "auth-username-password-form",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 20,
"flowAlias" : "Browser - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "f953ae9f-80f0-4396-ab9d-7de904c23041",
"alias" : "http challenge",
"description" : "An authentication flow based on challenge-response HTTP Authentication Schemes",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "no-cookie-redirect",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "REQUIRED",
"priority" : 20,
"flowAlias" : "Authentication Options",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "283a627a-4c33-4ee3-9c47-31fe2d307444",
"alias" : "registration",
"description" : "registration flow",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "registration-page-form",
"requirement" : "REQUIRED",
"priority" : 10,
"flowAlias" : "registration form",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "85f9888a-5395-4c1b-87ea-bb7af94e2f20",
"alias" : "registration form",
"description" : "registration form",
"providerId" : "form-flow",
"topLevel" : false,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "registration-user-creation",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-profile-action",
"requirement" : "REQUIRED",
"priority" : 40,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-password-action",
"requirement" : "REQUIRED",
"priority" : 50,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "registration-recaptcha-action",
"requirement" : "DISABLED",
"priority" : 60,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
}, {
"id" : "f5f2a017-bf14-4fa5-be54-9ab46fab3f9d",
"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",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-credential-email",
"requirement" : "REQUIRED",
"priority" : 20,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"authenticator" : "reset-password",
"requirement" : "REQUIRED",
"priority" : 30,
"userSetupAllowed" : false,
"autheticatorFlow" : false
}, {
"requirement" : "CONDITIONAL",
"priority" : 40,
"flowAlias" : "Reset - Conditional OTP",
"userSetupAllowed" : false,
"autheticatorFlow" : true
} ]
}, {
"id" : "b6b71d12-6e3a-434e-b83b-4587c394ac65",
"alias" : "saml ecp",
"description" : "SAML ECP Profile Authentication Flow",
"providerId" : "basic-flow",
"topLevel" : true,
"builtIn" : true,
"authenticationExecutions" : [ {
"authenticator" : "http-basic-authenticator",
"requirement" : "REQUIRED",
"priority" : 10,
"userSetupAllowed" : false,
"autheticatorFlow" : false
} ]
} ],
"authenticatorConfig" : [ {
"id" : "d2d40a8c-f926-4d84-a0a8-ef2e6b91da31",
"alias" : "create unique user config",
"config" : {
"require.password.update.after.registration" : "false"
}
}, {
"id" : "26d88ab2-a3ad-4400-a771-17224dac2d7e",
"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" : { }
} ],
"browserFlow" : "browser",
"registrationFlow" : "registration",
"directGrantFlow" : "direct grant",
"resetCredentialsFlow" : "reset credentials",
"clientAuthenticationFlow" : "clients",
"dockerAuthenticationFlow" : "docker auth",
"attributes" : {
"clientSessionIdleTimeout" : "0",
"clientSessionMaxLifespan" : "0"
},
"keycloakVersion" : "11.0.3",
"userManagedAccessAllowed" : false
}
================================================
FILE: _resources/demo-config/import-dir/placeholder-users-0.json
================================================
{
"realm" : "placeholder",
"users" : [ {
"id" : "4695110d-11fe-4ec4-977f-147eb8d6afdc",
"createdTimestamp" : 1583465306809,
"username" : "james@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "James",
"lastName" : "FamilyName",
"email" : "james@placeholder.com",
"credentials" : [ {
"id" : "f028c46f-d923-41e3-bee8-0547945b75c7",
"type" : "password",
"createdDate" : 1583465321139,
"secretData" : "{\"value\":\"lCJ8AN+4Coc2lAS1AxwdobF690pBIb7npyGuyQwey/mPlYiDHnYnye5LzKTeXsWdMfBnnfjE4HiOm3aQyweMQw==\",\"salt\":\"AHjkuDCoG8yS2d0NmR0YZA==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
}, {
"id" : "7fd7255b-bb1f-42a5-95a6-10a083d85a71",
"createdTimestamp" : 1583465485338,
"username" : "jennifer@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "Jennifer",
"lastName" : "FamilyName",
"email" : "jennifer@placeholder.com",
"credentials" : [ {
"id" : "cfc9e94d-3682-4623-a439-7f99002e3849",
"type" : "password",
"createdDate" : 1583465494759,
"secretData" : "{\"value\":\"Bnl6SmQuQgn9pBCHCH7dvf8lrBhFyh6MQ+jfxg/X7tyg5eWNuesF7sFzRvCzsSnKIGsidRb0azHVHy0uv9p3lw==\",\"salt\":\"K6ACQCuE18fTXhVP61nPSQ==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
}, {
"id" : "fbc5cfea-7e08-419f-a2d9-739d8687337a",
"createdTimestamp" : 1583465348718,
"username" : "john@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "John",
"lastName" : "FamilyName",
"email" : "john@placeholder.com",
"credentials" : [ {
"id" : "70670e5b-5240-45d9-9ddd-b13290f23196",
"type" : "password",
"createdDate" : 1583465362989,
"secretData" : "{\"value\":\"3G291rtIi2o3sFLCYdcvYZFAvytH7Jxka7jM36o7vUYJeOApRciINiu8CPW/X23VyzHd8UJ9qiF31cqSvU3KVQ==\",\"salt\":\"UtXr7ED9SDhFg+dDZbsnSw==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
}, {
"id" : "8341404d-9004-49a9-87b6-a97b3e79adf2",
"createdTimestamp" : 1583465423394,
"username" : "mary@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "Mary",
"lastName" : "FamilyName",
"email" : "mary@placeholder.com",
"credentials" : [ {
"id" : "fab26a8c-0180-4519-8ae8-d2a33a091a66",
"type" : "password",
"createdDate" : 1583465433080,
"secretData" : "{\"value\":\"7Zw+Ez3zNwQMsSHqVDfiGfAEZN5OenmoCq19jDUHZcqOkbsat5wSHzY+nrg6ZgfVw7E2/6f+6X5EDX0geueSpw==\",\"salt\":\"Y+SAh1lGN6GEEpwM3ADbHA==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
}, {
"id" : "bf2bd5cd-e6e0-4826-8193-126796d52789",
"createdTimestamp" : 1583465451452,
"username" : "patricia@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "Patricia",
"lastName" : "FamilyName",
"email" : "patricia@placeholder.com",
"credentials" : [ {
"id" : "9f2c242a-f069-468f-860f-faa38baba01b",
"type" : "password",
"createdDate" : 1583465460220,
"secretData" : "{\"value\":\"I4IUJwBFuuOw7UN7j0GWyE77FjZNu3mtPQ58tn/KVO9PjLuRTdDSeyRV6k359gK7pOfLjdFxY16P1EBHqkfQRw==\",\"salt\":\"pi0KrCgHZPqCyFHF03gQ1Q==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
}, {
"id" : "3fc781dd-8f07-4c34-9ca3-02e194f7ac69",
"createdTimestamp" : 1583465389437,
"username" : "robert@placeholder.com",
"enabled" : true,
"totp" : false,
"emailVerified" : true,
"firstName" : "Robert",
"lastName" : "FamilyName",
"email" : "robert@placeholder.com",
"credentials" : [ {
"id" : "a3a7955d-07b8-4004-b031-5845c4257171",
"type" : "password",
"createdDate" : 1583465405118,
"secretData" : "{\"value\":\"xjHdyum4eDUqbeQhadji4URJhS688vLmQvrGEBC3FJwQb0ceCzbf/TSiuqAQy4JrzZt3cKDdAiXi1BZfjWoD/A==\",\"salt\":\"AbR+OJk8LjTYdc0FEQ/2tQ==\"}",
"credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}"
} ],
"disableableCredentialTypes" : [ ],
"requiredActions" : [ ],
"realmRoles" : [ "offline_access", "product_view", "uma_authorization" ],
"clientRoles" : {
"account" : [ "manage-account", "view-profile" ]
},
"notBefore" : 0,
"groups" : [ ]
} ]
}
================================================
FILE: _resources/demo-config/standalone-ha.xml
================================================
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:13.0">
<extensions>
<extension module="org.jboss.as.clustering.infinispan"/>
<extension module="org.jboss.as.clustering.jgroups"/>
<extension module="org.jboss.as.connector"/>
<extension module="org.jboss.as.deployment-scanner"/>
<extension module="org.jboss.as.ee"/>
<extension module="org.jboss.as.ejb3"/>
<extension module="org.jboss.as.jaxrs"/>
<extension module="org.jboss.as.jmx"/>
<extension module="org.jboss.as.jpa"/>
<extension module="org.jboss.as.logging"/>
<extension module="org.jboss.as.mail"/>
<extension module="org.jboss.as.modcluster"/>
<extension module="org.jboss.as.naming"/>
<extension module="org.jboss.as.remoting"/>
<extension module="org.jboss.as.security"/>
<extension module="org.jboss.as.transactions"/>
<extension module="org.jboss.as.weld"/>
<extension module="org.keycloak.keycloak-server-subsystem"/>
<extension module="org.wildfly.extension.bean-validation"/>
<extension module="org.wildfly.extension.core-management"/>
<extension module="org.wildfly.extension.elytron"/>
<extension module="org.wildfly.extension.io"/>
<extension module="org.wildfly.extension.microprofile.config-smallrye"/>
<extension module="org.wildfly.extension.microprofile.health-smallrye"/>
<extension module="org.wildfly.extension.microprofile.metrics-smallrye"/>
<extension module="org.wildfly.extension.request-controller"/>
<extension module="org.wildfly.extension.security.manager"/>
<extension module="org.wildfly.extension.undertow"/>
</extensions>
<management>
<security-realms>
<security-realm name="ManagementRealm">
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<server-identities>
<ssl>
<keystore path="application.keystore" relative-to="jboss.server.config.dir" keystore-password="password" alias="server" key-password="password" generate-self-signed-certificate-host="localhost"/>
</ssl>
</server-identities>
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="file"/>
</handlers>
</logger>
</audit-log>
<management-interfaces>
<http-interface security-realm="ManagementRealm">
<http-upgrade enabled="true"/>
<socket-binding http="management-http"/>
</http-interface>
</management-interfaces>
<access-control provider="simple">
<role-mapping>
<role name="SuperUser">
<include>
<user name="$local"/>
</include>
</role>
</role-mapping>
</access-control>
</management>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:8.0">
<console-handler name="CONSOLE">
<formatter>
<named-formatter name="COLOR-PATTERN"/>
</formatter>
</console-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
<logger category="io.jaegertracing.Configuration">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<logger category="org.keycloak">
<level name="${env.KEYCLOAK_LOGLEVEL:INFO}"/>
</logger>
<root-logger>
<level name="${env.ROOT_LOGLEVEL:INFO}"/>
<handlers>
<handler name="CONSOLE"/>
</handlers>
</root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
</subsystem>
<subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>
<subsystem xmlns="urn:jboss:domain:core-management:1.0"/>
<subsystem xmlns="urn:jboss:domain:datasources:6.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:postgresql://${env.DB_ADDR:postgres}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}</connection-url>
<driver>postgresql</driver>
<pool>
<flush-strategy>IdleConnections</flush-strategy>
</pool>
<security>
<user-name>${env.DB_USER:keycloak}</user-name>
<password>${env.DB_PASSWORD:password}</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
</validation>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="postgresql" module="org.postgresql.jdbc">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:ee:5.0">
<spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
<concurrent>
<context-services>
<context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
</context-services>
<managed-thread-factories>
<managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
</managed-thread-factories>
<managed-executor-services>
<managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
</managed-executor-services>
<managed-scheduled-executor-services>
<managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
</managed-scheduled-executor-services>
</concurrent>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:ejb3:7.0">
<session-bean>
<stateless>
<bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
</stateless>
<stateful default-access-timeout="5000" cache-ref="distributable" passivation-disabled-cache-ref="simple"/>
<singleton default-access-timeout="5000"/>
</session-bean>
<pools>
<bean-instance-pools>
<strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
<strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
</bean-instance-pools>
</pools>
<caches>
<cache name="simple"/>
<cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
</caches>
<passivation-stores>
<passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
</passivation-stores>
<async thread-pool-name="default"/>
<timer-service thread-pool-name="default" default-data-store="default-file-store">
<data-stores>
<file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
</data-stores>
</timer-service>
<remote connector-ref="http-remoting-connector" thread-pool-name="default">
<channel-creation-options>
<option name="MAX_OUTBOUND_MESSAGES" value="1234" type="remoting"/>
</channel-creation-options>
</remote>
<thread-pools>
<thread-pool name="default">
<max-threads count="10"/>
<keepalive-time time="60" unit="seconds"/>
</thread-pool>
</thread-pools>
<default-security-domain value="other"/>
<default-missing-method-permissions-deny-access value="true"/>
<statistics enabled="${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
<log-system-exceptions value="true"/>
</subsystem>
<subsystem xmlns="urn:wildfly:elytron:10.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
<providers>
<aggregate-providers name="combined-providers">
<providers name="elytron"/>
<providers name="openssl"/>
</aggregate-providers>
<provider-loader name="elytron" module="org.wildfly.security.elytron"/>
<provider-loader name="openssl" module="org.wildfly.openssl"/>
</providers>
<audit-logging>
<file-audit-log name="local-audit" path="audit.log" relative-to="jboss.server.log.dir" format="JSON"/>
</audit-logging>
<security-domains>
<security-domain name="ApplicationDomain" default-realm="ApplicationRealm" permission-mapper="default-permission-mapper">
<realm name="ApplicationRealm" role-decoder="groups-to-roles"/>
<realm name="local"/>
</security-domain>
<security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
<realm name="ManagementRealm" role-decoder="groups-to-roles"/>
<realm name="local" role-mapper="super-user-mapper"/>
</security-domain>
</security-domains>
<security-realms>
<identity-realm name="local" identity="$local"/>
<properties-realm name="ApplicationRealm">
<users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ApplicationRealm"/>
<groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
</properties-realm>
<properties-realm name="ManagementRealm">
<users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
<groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
</properties-realm>
</security-realms>
<mappers>
<simple-permission-mapper name="default-permission-mapper" mapping-mode="first">
<permission-mapping>
<principal name="anonymous"/>
<permission-set name="default-permissions"/>
</permission-mapping>
<permission-mapping match-all="true">
<permission-set name="login-permission"/>
<permission-set name="default-permissions"/>
</permission-mapping>
</simple-permission-mapper>
<constant-realm-mapper name="local" realm-name="local"/>
<simple-role-decoder name="groups-to-roles" attribute="groups"/>
<constant-role-mapper name="super-user-mapper">
<role name="SuperUser"/>
</constant-role-mapper>
</mappers>
<permission-sets>
<permission-set name="login-permission">
<permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
</permission-set>
<permission-set name="default-permissions">
<permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
<permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
<permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
</permission-set>
</permission-sets>
<http>
<http-authentication-factory name="management-http-authentication" security-domain="ManagementDomain" http-server-mechanism-factory="global">
<mechanism-configuration>
<mechanism mechanism-name="DIGEST">
<mechanism-realm realm-name="ManagementRealm"/>
</mechanism>
</mechanism-configuration>
</http-authentication-factory>
<provider-http-server-mechanism-factory name="global"/>
</http>
<sasl>
<sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
<mechanism-configuration>
<mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
<mechanism mechanism-name="DIGEST-MD5">
<mechanism-realm realm-name="ApplicationRealm"/>
</mechanism>
</mechanism-configuration>
</sasl-authentication-factory>
<sasl-authentication-factory name="management-sasl-authentication" sasl-server-factory="configured" security-domain="ManagementDomain">
<mechanism-configuration>
<mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
<mechanism mechanism-name="DIGEST-MD5">
<mechanism-realm realm-name="ManagementRealm"/>
</mechanism>
</mechanism-configuration>
</sasl-authentication-factory>
<configurable-sasl-server-factory name="configured" sasl-server-factory="elytron">
<properties>
<property name="wildfly.sasl.local-user.default-user" value="$local"/>
</properties>
</configurable-sasl-server-factory>
<mechanism-provider-filtering-sasl-server-factory name="elytron" sasl-server-factory="global">
<filters>
<filter provider-name="WildFlyElytron"/>
</filters>
</mechanism-provider-filtering-sasl-server-factory>
<provider-sasl-server-factory name="global"/>
</sasl>
</subsystem>
<subsystem xmlns="urn:jboss:domain:infinispan:10.0">
<cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
<transport lock-timeout="60000"/>
<local-cache name="realms">
<object-memory size="10000"/>
</local-cache>
<local-cache name="users">
<object-memory size="10000"/>
</local-cache>
<local-cache name="authorization">
<object-memory size="10000"/>
</local-cache>
<local-cache name="keys">
<object-memory size="1000"/>
<expiration max-idle="3600000"/>
</local-cache>
<replicated-cache name="work"/>
<distributed-cache name="sessions" owners="1"/>
<distributed-cache name="authenticationSessions" owners="1"/>
<distributed-cache name="offlineSessions" owners="1"/>
<distributed-cache name="clientSessions" owners="1"/>
<distributed-cache name="offlineClientSessions" owners="1"/>
<distributed-cache name="loginFailures" owners="1"/>
<distributed-cache name="actionTokens" owners="2">
<object-memory size="-1"/>
<expiration interval="300000" max-idle="-1"/>
</distributed-cache>
</cache-container>
<cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
<transport lock-timeout="60000"/>
<replicated-cache name="default">
<transaction mode="BATCH"/>
</replicated-cache>
</cache-container>
<cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan">
<transport lock-timeout="60000"/>
<replicated-cache name="sso">
<locking isolation="REPEATABLE_READ"/>
<transaction mode="BATCH"/>
</replicated-cache>
<distributed-cache name="dist">
<locking isolation="REPEATABLE_READ"/>
<transaction mode="BATCH"/>
<file-store/>
</distributed-cache>
<distributed-cache name="routing"/>
</cache-container>
<cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
<transport lock-timeout="60000"/>
<distributed-cache name="dist">
<locking isolation="REPEATABLE_READ"/>
<transaction mode="BATCH"/>
<file-store/>
</distributed-cache>
</cache-container>
<cache-container name="hibernate" module="org.infinispan.hibernate-cache">
<transport lock-timeout="60000"/>
<local-cache name="local-query">
<object-memory size="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<invalidation-cache name="entity">
<transaction mode="NON_XA"/>
<object-memory size="10000"/>
<expiration max-idle="100000"/>
</invalidation-cache>
<replicated-cache name="timestamps"/>
</cache-container>
</subsystem>
<subsystem xmlns="urn:jboss:domain:io:3.0">
<worker name="default"/>
<buffer-pool name="default"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jaxrs:2.0"/>
<subsystem xmlns="urn:jboss:domain:jca:5.0">
<archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
<bean-validation enabled="true"/>
<default-workmanager>
<short-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</short-running-threads>
<long-running-threads>
<core-threads count="50"/>
<queue-length count="50"/>
<max-threads count="50"/>
<keepalive-time time="10" unit="seconds"/>
</long-running-threads>
</default-workmanager>
<cached-connection-manager/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jgroups:8.0">
<channels default="ee">
<channel name="ee" stack="udp" cluster="ejb"/>
</channels>
<stacks>
<stack name="udp">
<transport type="UDP" socket-binding="jgroups-udp"/>
<protocol type="PING"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="UFC"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
<stack name="tcp">
<transport type="TCP" socket-binding="jgroups-tcp"/>
<socket-protocol type="MPING" socket-binding="jgroups-mping"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
</stacks>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:jpa:1.1">
<jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
<web-context>auth</web-context>
<providers>
<provider>
classpath:${jboss.home.dir}/providers/*
</provider>
</providers>
<master-realm-name>master</master-realm-name>
<scheduled-task-interval>900</scheduled-task-interval>
<theme>
<staticMaxAge>-1</staticMaxAge>
<cacheThemes>false</cacheThemes>
<cacheTemplates>false</cacheTemplates>
<welcomeTheme>${env.KEYCLOAK_WELCOME_THEME:keycloak}</welcomeTheme>
<default>${env.KEYCLOAK_DEFAULT_THEME:keycloak}</default>
<dir>${jboss.home.dir}/themes</dir>
</theme>
<spi name="eventsStore">
<provider name="jpa" enabled="true">
<properties>
<property name="exclude-events" value="["REFRESH_TOKEN"]"/>
</properties>
</provider>
</spi>
<spi name="userCache">
<provider name="default" enabled="true"/>
</spi>
<spi name="userSessionPersister">
<default-provider>jpa</default-provider>
</spi>
<spi name="timer">
<default-provider>basic</default-provider>
</spi>
<spi name="connectionsHttpClient">
<provider name="default" enabled="true"/>
</spi>
<spi name="connectionsJpa">
<provider name="default" enabled="true">
<properties>
<property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
<property name="initializeEmpty" value="true"/>
<property name="migrationStrategy" value="update"/>
<property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
<property name="schema" value="${env.DB_SCHEMA:public}"/>
</properties>
</provider>
</spi>
<spi name="realmCache">
<provider name="default" enabled="true"/>
</spi>
<spi name="connectionsInfinispan">
<default-provider>default</default-provider>
<provider name="default" enabled="true">
<properties>
<property name="cacheContainer" value="java:jboss/infinispan/container/keycloak"/>
</properties>
</provider>
</spi>
<spi name="jta-lookup">
<default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider>
<provider name="jboss" enabled="true"/>
</spi>
<spi name="publicKeyStorage">
<provider name="infinispan" enabled="true">
<properties>
<property name="minTimeBetweenRequests" value="10"/>
</properties>
</provider>
</spi>
<spi name="x509cert-lookup">
<default-provider>${keycloak.x509cert.lookup.provider:default}</default-provider>
<provider name="default" enabled="true"/>
</spi>
<spi name="hostname">
<default-provider>${keycloak.hostname.provider:default}</default-provider>
<provider name="default" enabled="true">
<properties>
<property name="frontendUrl" value="${keycloak.frontendUrl:}"/>
<property name="forceBackendUrlToFrontendUrl" value="false"/>
</properties>
</provider>
<provider name="fixed" enabled="true">
<properties>
<property name="hostname" value="${keycloak.hostname.fixed.hostname:localhost}"/>
<property name="httpPort" value="${keycloak.hostname.fixed.httpPort:-1}"/>
<property name="httpsPort" value="${keycloak.hostname.fixed.httpsPort:-1}"/>
<property name="alwaysHttps" value="${keycloak.hostname.fixed.alwaysHttps:false}"/>
</properties>
</provider>
</spi>
<spi name="emailTemplate">
<provider name="freemarker" enabled="false"/>
</spi>
</subsystem>
<subsystem xmlns="urn:jboss:domain:mail:4.0">
<mail-session name="default" jndi-name="java:jboss/mail/Default">
<smtp-server outbound-socket-binding-ref="mail-smtp"/>
</mail-session>
</subsystem>
<subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0"/>
<subsystem xmlns="urn:wildfly:microprofile-health-smallrye:2.0" security-enabled="false" empty-liveness-checks-status="${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}" empty-readiness-checks-status="${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}"/>
<subsystem xmlns="urn:wildfly:microprofile-metrics-smallrye:2.0" security-enabled="false" exposed-subsystems="*" prefix="${wildfly.metrics.prefix:wildfly}"/>
<subsystem xmlns="urn:jboss:domain:modcluster:5.0">
<proxy name="default" advertise-socket="modcluster" listener="ajp">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</proxy>
</subsystem>
<subsystem xmlns="urn:jboss:domain:naming:2.0">
<remote-naming/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:remoting:4.0">
<http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>
<subsystem xmlns="urn:jboss:domain:security:2.0">
<security-domains>
<security-domain name="other" cache-type="default">
<authentication>
<login-module code="Remoting" flag="optional">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="RealmDirect" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
</authentication>
</security-domain>
<security-domain name="jboss-web-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required"/>
</authorization>
</security-domain>
<security-domain name="jaspitest" cache-type="default">
<authentication-jaspi>
<login-module-stack name="dummy">
<login-module code="Dummy" flag="optional"/>
</login-module-stack>
<auth-module code="Dummy"/>
</authentication-jaspi>
</security-domain>
<security-domain name="jboss-ejb-policy" cache-type="default">
<authorization>
<policy-module code="Delegating" flag="required"/>
</authorization>
</security-domain>
</security-domains>
</subsystem>
<subsystem xmlns="urn:jboss:domain:security-manager:1.0">
<deployment-permissions>
<maximum-set>
<permission class="java.security.AllPermission"/>
</maximum-set>
</deployment-permissions>
</subsystem>
<subsystem xmlns="urn:jboss:domain:transactions:5.0">
<core-environment node-identifier="${jboss.tx.node.id:1}">
<process-id>
<uuid/>
</process-id>
</core-environment>
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
<coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
<object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
</subsystem>
<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajp" socket-binding="ajp"/>
<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>
<https-listener name="https" socket-binding="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
</subsystem>
<subsystem xmlns="urn:jboss:domain:weld:4.0"/>
</profile>
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="private">
<inet-address value="${jboss.bind.address.private:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
</interfaces>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="jgroups-mping" interface="private" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
<socket-binding name="jgroups-tcp" interface="private" port="7600"/>
<socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
<socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
<socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="modcluster" multicast-address="${jboss.modcluster.multicast.address:224.0.1.105}" multicast-port="23364"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
</server>
================================================
FILE: docker-compose.yml
================================================
version: '3.7'
services:
postgres:
image: postgres:13
container_name: postgres
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
ports:
- 5434:5432
keycloak:
image: jboss/keycloak:11.0.3
container_name: keycloak
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
PROXY_ADDRESS_FORWARDING: "true"
TZ: UTC
KEYCLOAK_DEFAULT_THEME: theme-minimal
KEYCLOAK_WELCOME_THEME: theme-minimal
#KEYCLOAK_LOGLEVEL: DEBUG
ports:
- 8088:8080
command:
- "-Dkeycloak.migration.action=import -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/opt/jboss/keycloak/import-dir -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"
# - "-Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/opt/jboss/keycloak/export-dir -Dkeycloak.migration.usersPerFile=1000 -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"
volumes:
- ./_resources/demo-config/standalone-ha.xml:/opt/jboss/keycloak/standalone/configuration/standalone-ha.xml
- ./_resources/demo-config/import-dir:/opt/jboss/keycloak/import-dir
- ./_resources/demo-config/export-dir:/opt/jboss/keycloak/export-dir
#- ./theme-minimal/src/main/resources/theme/theme-minimal:/opt/jboss/keycloak/themes/theme-minimal
- ./theme-minimal/target/theme-minimal-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/theme-minimal-0.0.1-SNAPSHOT.jar
- ./provider-domain/target/provider-domain-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/provider-domain-0.0.1-SNAPSHOT.jar
- ./spi-registration-profile/target/spi-registration-profile-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/spi-registration-profile-0.0.1-SNAPSHOT.jar
- ./spi-resource/target/spi-resource-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/spi-resource-0.0.1-SNAPSHOT.jar
- ./spi-event-listener/target/spi-event-listener-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/spi-event-listener-0.0.1-SNAPSHOT.jar
- ./spi-mail-template-override/target/spi-mail-template-override-0.0.1-SNAPSHOT.jar:/opt/jboss/keycloak/standalone/deployments/spi-mail-template-override-0.0.1-SNAPSHOT.jar
depends_on:
- postgres
- mailhog
mailhog:
image: mailhog/mailhog:latest
container_name: mailhog
ports:
- 8025:8025
================================================
FILE: mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
================================================
FILE: mvnw.cmd
================================================
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
gitextract_lotnfs9n/
├── .gitattributes
├── .gitignore
├── .mvn/
│ └── wrapper/
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── README.md
├── _resources/
│ └── demo-config/
│ ├── export-dir/
│ │ └── .gitkeep
│ ├── import-dir/
│ │ ├── master-realm.json
│ │ ├── master-users-0.json
│ │ ├── placeholder-realm.json
│ │ └── placeholder-users-0.json
│ └── standalone-ha.xml
├── docker-compose.yml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── provider-domain/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── domain/
│ │ ├── CustomJpaEntityProvider.java
│ │ ├── CustomJpaEntityProviderFactory.java
│ │ └── Product.java
│ └── resources/
│ └── META-INF/
│ ├── 001-products.xml
│ ├── custom-changelog.xml
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.connections.jpa.entityprovider.JpaEntityProviderFactory
├── spi-event-listener/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── events/
│ │ └── logging/
│ │ ├── PlaceholderEventListenerProvider.java
│ │ ├── PlaceholderEventListenerProviderFactory.java
│ │ ├── UserUuidDto.java
│ │ └── UserVerifiedTransaction.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.events.EventListenerProviderFactory
├── spi-mail-template-override/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── mail/
│ │ ├── PlaceholderFreeMarkerEmailTemplateProvider.java
│ │ └── PlaceholderFreeMarkerEmailTemplateProviderFactory.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.email.EmailTemplateProviderFactory
├── spi-registration-profile/
│ ├── README.md
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── zonaut/
│ │ └── keycloak/
│ │ └── extensions/
│ │ └── actions/
│ │ └── forms/
│ │ └── PlaceholderRegistrationProfile.java
│ └── resources/
│ └── META-INF/
│ ├── jboss-deployment-structure.xml
│ └── services/
│ └── org.keycloak.authentication.FormActionFactory
├── spi-resource/
│ ├── README.md
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── zonaut/
│ │ │ └── keycloak/
│ │ │ └── extensions/
│ │ │ └── resource/
│ │ │ ├── AuthCheck.java
│ │ │ ├── AuthCheckType.java
│ │ │ ├── CustomResourceProvider.java
│ │ │ └── CustomResourceProviderFactory.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── jboss-deployment-structure.xml
│ │ └── services/
│ │ └── org.keycloak.services.resource.RealmResourceProviderFactory
│ ├── test-anonymous-user.sh
│ └── test-authenticated-user.sh
└── theme-minimal/
├── README.md
├── pom.xml
└── src/
└── main/
└── resources/
├── META-INF/
│ └── keycloak-themes.json
└── theme/
└── theme-minimal/
├── account/
│ ├── resources/
│ │ └── css/
│ │ └── account.css
│ └── theme.properties
├── admin/
│ ├── resources/
│ │ └── css/
│ │ └── styles.css
│ └── theme.properties
├── email/
│ ├── html/
│ │ ├── email-test.ftl
│ │ ├── email-verification-with-code.ftl
│ │ ├── email-verification.ftl
│ │ ├── event-login_error.ftl
│ │ ├── event-remove_totp.ftl
│ │ ├── event-update_password.ftl
│ │ ├── event-update_totp.ftl
│ │ ├── executeActions.ftl
│ │ ├── identity-provider-link.ftl
│ │ └── password-reset.ftl
│ ├── messages/
│ │ ├── messages_ca.properties
│ │ ├── messages_cs.properties
│ │ ├── messages_de.properties
│ │ ├── messages_en.properties
│ │ ├── messages_es.properties
│ │ ├── messages_fr.properties
│ │ ├── messages_it.properties
│ │ ├── messages_ja.properties
│ │ ├── messages_lt.properties
│ │ ├── messages_nl.properties
│ │ ├── messages_no.properties
│ │ ├── messages_pl.properties
│ │ ├── messages_pt_BR.properties
│ │ ├── messages_ru.properties
│ │ ├── messages_sk.properties
│ │ ├── messages_sv.properties
│ │ ├── messages_tr.properties
│ │ └── messages_zh_CN.properties
│ ├── text/
│ │ ├── email-test.ftl
│ │ ├── email-verification-with-code.ftl
│ │ ├── email-verification.ftl
│ │ ├── event-login_error.ftl
│ │ ├── event-remove_totp.ftl
│ │ ├── event-update_password.ftl
│ │ ├── event-update_totp.ftl
│ │ ├── executeActions.ftl
│ │ ├── identity-provider-link.ftl
│ │ └── password-reset.ftl
│ └── theme.properties
├── login/
│ ├── cli_splash.ftl
│ ├── code.ftl
│ ├── error.ftl
│ ├── info.ftl
│ ├── login-config-totp-text.ftl
│ ├── login-config-totp.ftl
│ ├── login-idp-link-confirm.ftl
│ ├── login-idp-link-email.ftl
│ ├── login-oauth-grant.ftl
│ ├── login-otp.ftl
│ ├── login-page-expired.ftl
│ ├── login-password.ftl
│ ├── login-reset-password.ftl
│ ├── login-update-password.ftl
│ ├── login-update-profile.ftl
│ ├── login-username.ftl
│ ├── login-verify-email-code-text.ftl
│ ├── login-verify-email.ftl
│ ├── login-x509-info.ftl
│ ├── login.ftl
│ ├── messages/
│ │ ├── messages_ca.properties
│ │ ├── messages_cs.properties
│ │ ├── messages_de.properties
│ │ ├── messages_en.properties
│ │ ├── messages_es.properties
│ │ ├── messages_fr.properties
│ │ ├── messages_it.properties
│ │ ├── messages_ja.properties
│ │ ├── messages_lt.properties
│ │ ├── messages_nl.properties
│ │ ├── messages_no.properties
│ │ ├── messages_pl.properties
│ │ ├── messages_pt_BR.properties
│ │ ├── messages_ru.properties
│ │ ├── messages_sk.properties
│ │ ├── messages_sv.properties
│ │ ├── messages_tr.properties
│ │ └── messages_zh_CN.properties
│ ├── register.ftl
│ ├── resources/
│ │ ├── css/
│ │ │ └── login.css
│ │ └── js/
│ │ └── base64url.js
│ ├── saml-post-form.ftl
│ ├── select-authenticator.ftl
│ ├── template.ftl
│ ├── terms.ftl
│ ├── theme.properties
│ ├── webauthn-authenticate.ftl
│ ├── webauthn-error.ftl
│ └── webauthn-register.ftl
└── welcome/
├── index.ftl
├── resources/
│ └── css/
│ └── welcome.css
└── theme.properties
SYMBOL INDEX (114 symbols across 16 files)
FILE: .mvn/wrapper/MavenWrapperDownloader.java
class MavenWrapperDownloader (line 21) | public class MavenWrapperDownloader {
method main (line 48) | public static void main(String args[]) {
method downloadFileFromURL (line 97) | private static void downloadFileFromURL(String urlString, File destina...
FILE: provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/CustomJpaEntityProvider.java
class CustomJpaEntityProvider (line 8) | public class CustomJpaEntityProvider implements JpaEntityProvider {
method getEntities (line 10) | @Override
method getChangelogLocation (line 15) | @Override
method close (line 20) | @Override
method getFactoryId (line 24) | @Override
FILE: provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/CustomJpaEntityProviderFactory.java
class CustomJpaEntityProviderFactory (line 9) | public class CustomJpaEntityProviderFactory implements JpaEntityProvider...
method create (line 13) | @Override
method getId (line 18) | @Override
method init (line 23) | @Override
method postInit (line 27) | @Override
method close (line 31) | @Override
FILE: provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/Product.java
class Product (line 8) | @Entity
method getId (line 22) | public String getId() {
method setId (line 26) | public void setId(String id) {
method getRealmId (line 30) | public String getRealmId() {
method setRealmId (line 34) | public void setRealmId(String realmId) {
method getName (line 38) | public String getName() {
method setName (line 42) | public void setName(String name) {
FILE: spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/PlaceholderEventListenerProvider.java
class PlaceholderEventListenerProvider (line 15) | public class PlaceholderEventListenerProvider implements EventListenerPr...
method PlaceholderEventListenerProvider (line 22) | public PlaceholderEventListenerProvider(KeycloakSession session) {
method onEvent (line 27) | @Override
method onEvent (line 64) | @Override
method close (line 80) | @Override
FILE: spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/PlaceholderEventListenerProviderFactory.java
class PlaceholderEventListenerProviderFactory (line 8) | public class PlaceholderEventListenerProviderFactory implements EventLis...
method create (line 10) | @Override
method init (line 15) | @Override
method postInit (line 20) | @Override
method close (line 25) | @Override
method getId (line 30) | @Override
FILE: spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/UserUuidDto.java
class UserUuidDto (line 3) | public class UserUuidDto {
method UserUuidDto (line 9) | public UserUuidDto(String type, String uuid, String email) {
method getType (line 15) | public String getType() {
method getUuid (line 19) | public String getUuid() {
method getEmail (line 23) | public String getEmail() {
method toString (line 27) | @Override
FILE: spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/UserVerifiedTransaction.java
class UserVerifiedTransaction (line 17) | public class UserVerifiedTransaction extends AbstractKeycloakTransaction {
method UserVerifiedTransaction (line 30) | public UserVerifiedTransaction(UserUuidDto userUuidDto) {
method commitImpl (line 34) | @Override
method rollbackImpl (line 75) | @Override
FILE: spi-mail-template-override/src/main/java/com/zonaut/keycloak/extensions/mail/PlaceholderFreeMarkerEmailTemplateProvider.java
class PlaceholderFreeMarkerEmailTemplateProvider (line 32) | public class PlaceholderFreeMarkerEmailTemplateProvider implements Email...
method PlaceholderFreeMarkerEmailTemplateProvider (line 45) | public PlaceholderFreeMarkerEmailTemplateProvider(KeycloakSession sess...
method setRealm (line 50) | @Override
method setUser (line 56) | @Override
method setAttribute (line 62) | @Override
method setAuthenticationSession (line 68) | @Override
method getRealmName (line 74) | protected String getRealmName() {
method sendEvent (line 82) | @Override
method sendPasswordReset (line 91) | @Override
method sendSmtpTestEmail (line 102) | @Override
method sendConfirmIdentityBrokerLink (line 118) | @Override
method sendExecuteActions (line 137) | @Override
method sendVerifyEmail (line 148) | @Override
method addLinkInfoIntoAttributes (line 166) | protected void addLinkInfoIntoAttributes(String link, long expirationI...
method send (line 180) | @Override
method processTemplate (line 185) | protected PlaceholderFreeMarkerEmailTemplateProvider.EmailTemplate pro...
method getTheme (line 215) | protected Theme getTheme() throws IOException {
method send (line 219) | @Override
method send (line 231) | protected void send(String subject, String textBody, String htmlBody) ...
method send (line 235) | protected void send(Map<String, String> config, String subject, String...
method close (line 240) | @Override
method toCamelCase (line 244) | protected String toCamelCase(EventType event) {
class EmailTemplate (line 252) | protected class EmailTemplate {
method EmailTemplate (line 258) | public EmailTemplate(String subject, String textBody, String htmlBod...
method getSubject (line 264) | public String getSubject() {
method getTextBody (line 268) | public String getTextBody() {
method getHtmlBody (line 272) | public String getHtmlBody() {
FILE: spi-mail-template-override/src/main/java/com/zonaut/keycloak/extensions/mail/PlaceholderFreeMarkerEmailTemplateProviderFactory.java
class PlaceholderFreeMarkerEmailTemplateProviderFactory (line 10) | public class PlaceholderFreeMarkerEmailTemplateProviderFactory implement...
method create (line 14) | @Override
method init (line 19) | @Override
method postInit (line 24) | @Override
method close (line 28) | @Override
method getId (line 33) | @Override
FILE: spi-registration-profile/src/main/java/com/zonaut/keycloak/extensions/actions/forms/PlaceholderRegistrationProfile.java
class PlaceholderRegistrationProfile (line 25) | public class PlaceholderRegistrationProfile implements FormAction, FormA...
method getHelpText (line 29) | @Override
method getConfigProperties (line 34) | @Override
method validate (line 39) | @Override
method success (line 83) | @Override
method buildPage (line 92) | @Override
method requiresUser (line 97) | @Override
method configuredFor (line 102) | @Override
method setRequiredActions (line 107) | @Override
method isUserSetupAllowed (line 112) | @Override
method close (line 118) | @Override
method getDisplayType (line 123) | @Override
method getReferenceCategory (line 128) | @Override
method isConfigurable (line 133) | @Override
method getRequirementChoices (line 142) | @Override
method create (line 146) | @Override
method init (line 151) | @Override
method postInit (line 156) | @Override
method getId (line 161) | @Override
FILE: spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/AuthCheck.java
class AuthCheck (line 17) | public class AuthCheck {
method whoAmI (line 21) | public static void whoAmI(KeycloakSession session) {
method hasRole (line 32) | public static void hasRole(KeycloakSession session, String role) {
method isClient (line 41) | public static void isClient(KeycloakSession session, String clientName) {
method isAuthenticated (line 51) | public static void isAuthenticated(KeycloakSession session) {
method isAuthenticated (line 56) | public static void isAuthenticated(AuthenticationManager.AuthResult au...
FILE: spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/AuthCheckType.java
type AuthCheckType (line 3) | public enum AuthCheckType {
FILE: spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/CustomResourceProvider.java
class CustomResourceProvider (line 21) | public class CustomResourceProvider implements RealmResourceProvider {
method CustomResourceProvider (line 27) | public CustomResourceProvider(KeycloakSession session) {
method getUsersByName (line 31) | @GET
method getResource (line 77) | @Override
method close (line 82) | @Override
FILE: spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/CustomResourceProviderFactory.java
class CustomResourceProviderFactory (line 9) | public class CustomResourceProviderFactory implements RealmResourceProvi...
method create (line 15) | @Override
method init (line 20) | @Override
method postInit (line 25) | @Override
method close (line 30) | @Override
method getId (line 35) | @Override
FILE: theme-minimal/src/main/resources/theme/theme-minimal/login/resources/js/base64url.js
function parse (line 6) | function parse (string, encoding, opts = {}) {
function stringify (line 64) | function stringify (data, encoding, opts = {}) {
Condensed preview — 152 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (785K chars).
[
{
"path": ".gitattributes",
"chars": 64,
"preview": "*.ftl linguist-detectable=false\n*.css linguist-detectable=false\n"
},
{
"path": ".gitignore",
"chars": 549,
"preview": "# Customize with https://github.com/github/gitignore\n\n# compiled output\n/dist\n/tmp\n/out-tsc\n/node\n/build\n/out\ntarget/\ndi"
},
{
"path": ".mvn/wrapper/MavenWrapperDownloader.java",
"chars": 4942,
"preview": "/*\n * Copyright 2007-present the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \""
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 218,
"preview": "distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip\nwrap"
},
{
"path": "README.md",
"chars": 3066,
"preview": "# Keycloak extensions\n\n**This repo is no longer maintained**\n\nKeycloak extension examples. \nTitles with * are already a"
},
{
"path": "_resources/demo-config/export-dir/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "_resources/demo-config/import-dir/master-realm.json",
"chars": 66120,
"preview": "{\n \"id\" : \"master\",\n \"realm\" : \"master\",\n \"displayName\" : \"Keycloak\",\n \"displayNameHtml\" : \"<div class=\\\"kc-logo-tex"
},
{
"path": "_resources/demo-config/import-dir/master-users-0.json",
"chars": 999,
"preview": "{\n \"realm\" : \"master\",\n \"users\" : [ {\n \"id\" : \"360eec39-361b-4e59-99d8-cd00fd954545\",\n \"createdTimestamp\" : 1583"
},
{
"path": "_resources/demo-config/import-dir/placeholder-realm.json",
"chars": 63550,
"preview": "{\n \"id\" : \"placeholder\",\n \"realm\" : \"placeholder\",\n \"notBefore\" : 0,\n \"revokeRefreshToken\" : false,\n \"refreshTokenM"
},
{
"path": "_resources/demo-config/import-dir/placeholder-users-0.json",
"chars": 5866,
"preview": "{\n \"realm\" : \"placeholder\",\n \"users\" : [ {\n \"id\" : \"4695110d-11fe-4ec4-977f-147eb8d6afdc\",\n \"createdTimestamp\" :"
},
{
"path": "_resources/demo-config/standalone-ha.xml",
"chars": 37593,
"preview": "<?xml version='1.0' encoding='UTF-8'?>\n\n<server xmlns=\"urn:jboss:domain:13.0\">\n <extensions>\n <extension modul"
},
{
"path": "docker-compose.yml",
"chars": 2598,
"preview": "version: '3.7'\n\nservices:\n postgres:\n image: postgres:13\n container_name: postgres\n environment:\n POSTGRE"
},
{
"path": "mvnw",
"chars": 10070,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "mvnw.cmd",
"chars": 6608,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "pom.xml",
"chars": 692,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLoca"
},
{
"path": "provider-domain/README.md",
"chars": 346,
"preview": "# Provider domain\n\nAn example of adding new domain entities \n\nThis will create the following new table\n\n* prfx_products"
},
{
"path": "provider-domain/pom.xml",
"chars": 2937,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/CustomJpaEntityProvider.java",
"chars": 630,
"preview": "package com.zonaut.keycloak.extensions.domain;\n\nimport org.keycloak.connections.jpa.entityprovider.JpaEntityProvider;\n\ni"
},
{
"path": "provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/CustomJpaEntityProviderFactory.java",
"chars": 857,
"preview": "package com.zonaut.keycloak.extensions.domain;\n\nimport org.keycloak.Config.Scope;\nimport org.keycloak.connections.jpa.en"
},
{
"path": "provider-domain/src/main/java/com/zonaut/keycloak/extensions/domain/Product.java",
"chars": 842,
"preview": "package com.zonaut.keycloak.extensions.domain;\n\nimport javax.persistence.Column;\nimport javax.persistence.Entity;\nimport"
},
{
"path": "provider-domain/src/main/resources/META-INF/001-products.xml",
"chars": 991,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchang"
},
{
"path": "provider-domain/src/main/resources/META-INF/custom-changelog.xml",
"chars": 535,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchang"
},
{
"path": "provider-domain/src/main/resources/META-INF/jboss-deployment-structure.xml",
"chars": 347,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jboss-deployment-structure>\n <deployment>\n <dependencies>\n "
},
{
"path": "provider-domain/src/main/resources/META-INF/services/org.keycloak.connections.jpa.entityprovider.JpaEntityProviderFactory",
"chars": 69,
"preview": "com.zonaut.keycloak.extensions.domain.CustomJpaEntityProviderFactory\n"
},
{
"path": "spi-event-listener/README.md",
"chars": 722,
"preview": "# SPI event listener\n\nAn example of a custom event listener that logs all events. \nAlso contains an example of a transa"
},
{
"path": "spi-event-listener/pom.xml",
"chars": 2710,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/PlaceholderEventListenerProvider.java",
"chars": 3753,
"preview": "package com.zonaut.keycloak.extensions.events.logging;\n\nimport org.jboss.logging.Logger;\nimport org.keycloak.events.Even"
},
{
"path": "spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/PlaceholderEventListenerProviderFactory.java",
"chars": 836,
"preview": "package com.zonaut.keycloak.extensions.events.logging;\n\nimport org.keycloak.Config;\nimport org.keycloak.events.EventList"
},
{
"path": "spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/UserUuidDto.java",
"chars": 725,
"preview": "package com.zonaut.keycloak.extensions.events.logging;\n\npublic class UserUuidDto {\n\n private String type;\n private"
},
{
"path": "spi-event-listener/src/main/java/com/zonaut/keycloak/extensions/events/logging/UserVerifiedTransaction.java",
"chars": 2827,
"preview": "package com.zonaut.keycloak.extensions.events.logging;\n\nimport static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;\n\n\nimpor"
},
{
"path": "spi-event-listener/src/main/resources/META-INF/jboss-deployment-structure.xml",
"chars": 241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jboss-deployment-structure>\n <deployment>\n <dependencies>\n "
},
{
"path": "spi-event-listener/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory",
"chars": 86,
"preview": "com.zonaut.keycloak.extensions.events.logging.PlaceholderEventListenerProviderFactory\n"
},
{
"path": "spi-mail-template-override/README.md",
"chars": 1468,
"preview": "# SPI mail template override\n\nAn example on how to change the default behaviour of the email templates and add extra var"
},
{
"path": "spi-mail-template-override/pom.xml",
"chars": 3184,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "spi-mail-template-override/src/main/java/com/zonaut/keycloak/extensions/mail/PlaceholderFreeMarkerEmailTemplateProvider.java",
"chars": 11110,
"preview": "package com.zonaut.keycloak.extensions.mail;\n\nimport org.keycloak.broker.provider.BrokeredIdentityContext;\nimport org.ke"
},
{
"path": "spi-mail-template-override/src/main/java/com/zonaut/keycloak/extensions/mail/PlaceholderFreeMarkerEmailTemplateProviderFactory.java",
"chars": 980,
"preview": "package com.zonaut.keycloak.extensions.mail;\n\nimport org.keycloak.Config;\nimport org.keycloak.email.EmailTemplateProvide"
},
{
"path": "spi-mail-template-override/src/main/resources/META-INF/jboss-deployment-structure.xml",
"chars": 285,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jboss-deployment-structure>\n <deployment>\n <dependencies>\n "
},
{
"path": "spi-mail-template-override/src/main/resources/META-INF/services/org.keycloak.email.EmailTemplateProviderFactory",
"chars": 86,
"preview": "com.zonaut.keycloak.extensions.mail.PlaceholderFreeMarkerEmailTemplateProviderFactory\n"
},
{
"path": "spi-registration-profile/README.md",
"chars": 1298,
"preview": "# SPI registration profile\n\nAn example of a custom registration profile action which does not validate first and last na"
},
{
"path": "spi-registration-profile/pom.xml",
"chars": 2728,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "spi-registration-profile/src/main/java/com/zonaut/keycloak/extensions/actions/forms/PlaceholderRegistrationProfile.java",
"chars": 5185,
"preview": "package com.zonaut.keycloak.extensions.actions.forms;\n\nimport org.keycloak.Config;\nimport org.keycloak.authentication.Fo"
},
{
"path": "spi-registration-profile/src/main/resources/META-INF/jboss-deployment-structure.xml",
"chars": 241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jboss-deployment-structure>\n <deployment>\n <dependencies>\n "
},
{
"path": "spi-registration-profile/src/main/resources/META-INF/services/org.keycloak.authentication.FormActionFactory",
"chars": 76,
"preview": "com.zonaut.keycloak.extensions.actions.forms.PlaceholderRegistrationProfile\n"
},
{
"path": "spi-resource/README.md",
"chars": 741,
"preview": "# SPI resource\n\nAn example of a custom REST resource.\n\nthis example will add a new base endpoint `auth/realms/<REALM>/cu"
},
{
"path": "spi-resource/pom.xml",
"chars": 2692,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/AuthCheck.java",
"chars": 2883,
"preview": "package com.zonaut.keycloak.extensions.resource;\n\nimport org.jboss.logging.Logger;\nimport org.keycloak.models.ClientMode"
},
{
"path": "spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/AuthCheckType.java",
"chars": 176,
"preview": "package com.zonaut.keycloak.extensions.resource;\n\npublic enum AuthCheckType {\n\n ANONYMOUS,\n AUTHENTICATED,\n AUT"
},
{
"path": "spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/CustomResourceProvider.java",
"chars": 2886,
"preview": "package com.zonaut.keycloak.extensions.resource;\n\nimport org.jboss.logging.Logger;\nimport org.keycloak.models.KeycloakSe"
},
{
"path": "spi-resource/src/main/java/com/zonaut/keycloak/extensions/resource/CustomResourceProviderFactory.java",
"chars": 1000,
"preview": "package com.zonaut.keycloak.extensions.resource;\n\nimport org.keycloak.Config;\nimport org.keycloak.models.KeycloakSession"
},
{
"path": "spi-resource/src/main/resources/META-INF/jboss-deployment-structure.xml",
"chars": 241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<jboss-deployment-structure>\n <deployment>\n <dependencies>\n "
},
{
"path": "spi-resource/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory",
"chars": 70,
"preview": "com.zonaut.keycloak.extensions.resource.CustomResourceProviderFactory\n"
},
{
"path": "spi-resource/test-anonymous-user.sh",
"chars": 790,
"preview": "#!/usr/bin/env bash\n\n# ================================================================================================="
},
{
"path": "spi-resource/test-authenticated-user.sh",
"chars": 1917,
"preview": "#!/usr/bin/env bash\n\n# ================================================================================================="
},
{
"path": "theme-minimal/README.md",
"chars": 2754,
"preview": "# Theme minimal\n\nAn example of a custom theme with only minimal changes.\n\nMore info on https://www.keycloak.org/docs/lat"
},
{
"path": "theme-minimal/pom.xml",
"chars": 1374,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:sc"
},
{
"path": "theme-minimal/src/main/resources/META-INF/keycloak-themes.json",
"chars": 213,
"preview": "{ \n \"themes\":[\n { \n \"name\":\"theme-minimal\",\n \"types\":[ \n \"account\",\n \"admin"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/account/resources/css/account.css",
"chars": 4836,
"preview": "html {\n height: 100%;\n}\n\nbody {\n background-color: #F9F9F9;\n margin: 0;\n padding: 0;\n height: 100%;\n}\n\nhe"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/account/theme.properties",
"chars": 503,
"preview": "parent=base\n\nstyles=css/account.css\nstylesCommon=node_modules/patternfly/dist/css/patternfly.min.css node_modules/patter"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/admin/resources/css/styles.css",
"chars": 8918,
"preview": "html,body {\n height: 100%;\n}\n\nform {\n margin-top: 20px;\n}\n\ntable {\n margin-top: 20px;\n}\n\n.required {\n color:"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/admin/theme.properties",
"chars": 285,
"preview": "parent=base\nstyles=css/styles.css\nstylesCommon=node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternf"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/email-test.ftl",
"chars": 114,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"emailTestBodyHtml\",realmName))?no_esc}\n\n<p>${testNewVariable}<p>\n\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/email-verification-with-code.ftl",
"chars": 94,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"emailVerificationBodyCodeHtml\",code))?no_esc}\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/email-verification.ftl",
"chars": 158,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"emailVerificationBodyHtml\",link, linkExpiration, realmName, linkExpirationFormatter(link"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/event-login_error.ftl",
"chars": 110,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"eventLoginErrorBodyHtml\",event.date,event.ipAddress))?no_esc}\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/event-remove_totp.ftl",
"chars": 111,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"eventRemoveTotpBodyHtml\",event.date, event.ipAddress))?no_esc}\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/event-update_password.ftl",
"chars": 115,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"eventUpdatePasswordBodyHtml\",event.date, event.ipAddress))?no_esc}\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/event-update_totp.ftl",
"chars": 111,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"eventUpdateTotpBodyHtml\",event.date, event.ipAddress))?no_esc}\n</body>\n</html>\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/executeActions.ftl",
"chars": 412,
"preview": "<#outputformat \"plainText\">\n<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as reqAct"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/identity-provider-link.ftl",
"chars": 218,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"identityProviderLinkBodyHtml\", identityProviderAlias, realmName, identityProviderContext"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/html/password-reset.ftl",
"chars": 153,
"preview": "<html>\n<body>\n${kcSanitize(msg(\"passwordResetBodyHtml\",link, linkExpiration, realmName, linkExpirationFormatter(linkExpi"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_ca.properties",
"chars": 3797,
"preview": "emailVerificationSubject=Verificaci\\u00F3 d''email\nemailVerificationBody=Alg\\u00FA ha creat un compte de {2} amb aquesta"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_cs.properties",
"chars": 5227,
"preview": "# encoding: utf-8\nemailVerificationSubject=Ověření e-mailu\nemailVerificationBody=Někdo vytvořil účet {2} s touto e-mailo"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_de.properties",
"chars": 4899,
"preview": "emailVerificationSubject=E-Mail verifizieren\nemailVerificationBody=Jemand hat ein {2} Konto mit dieser E-Mail-Adresse er"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_en.properties",
"chars": 5489,
"preview": "emailVerificationSubject=Verify email\nemailVerificationBody=Someone has created a {2} account with this email address. I"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_es.properties",
"chars": 3639,
"preview": "emailVerificationSubject=Verificaci\\u00F3n de email\nemailVerificationBody=Alguien ha creado una cuenta de {2} con esta d"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_fr.properties",
"chars": 4377,
"preview": "emailVerificationSubject=V\\u00e9rification du courriel\nemailVerificationBody=Quelqu''un vient de cr\\u00e9er un compte \"{"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_it.properties",
"chars": 6204,
"preview": "emailVerificationSubject=Verifica l''email\nemailVerificationBody=Qualcuno ha creato un account {2} con questo indirizzo "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_ja.properties",
"chars": 3774,
"preview": "# encoding: utf-8\nemailVerificationSubject=Eメールの確認\nemailVerificationBody=このメールアドレスで{2}アカウントが作成されました。以下のリンクをクリックしてメールアドレス"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_lt.properties",
"chars": 4160,
"preview": "# encoding: utf-8\nemailVerificationSubject=El. pašto patvirtinimas\nemailVerificationBody=Paskyra {2} sukurta naudojant š"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_nl.properties",
"chars": 4794,
"preview": "emailVerificationSubject=Bevestig e-mailadres\nemailVerificationBody=Iemand heeft een {2} account aangemaakt met dit e-ma"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_no.properties",
"chars": 4354,
"preview": "emailVerificationSubject=Bekreft e-postadresse\nemailVerificationBody=Noen har opprettet en {2} konto med denne e-postadr"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_pl.properties",
"chars": 5609,
"preview": "# encoding: UTF-8\nemailVerificationSubject=Zweryfikuj email\nemailVerificationBody=Ktoś utworzył już konto {2} z tym adre"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_pt_BR.properties",
"chars": 6052,
"preview": "emailVerificationSubject=Verifica\\u00E7\\u00E3o de e-mail\nemailVerificationBody=Algu\\u00E9m criou uma conta {2} com este "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_ru.properties",
"chars": 4128,
"preview": "# encoding: utf-8\nemailVerificationSubject=Подтверждение E-mail\nemailVerificationBody=Кто-то создал учетную запись {2} с"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_sk.properties",
"chars": 5198,
"preview": "# encoding: utf-8\nemailVerificationSubject=Overenie e-mailu\nemailVerificationBody=Niekto vytvoril účet {2} s touto e-mai"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_sv.properties",
"chars": 4378,
"preview": "# encoding: utf-8\nemailVerificationSubject=Verifiera e-post\nemailVerificationBody=Någon har skapat ett {2} konto med den"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_tr.properties",
"chars": 7366,
"preview": "emailVerificationSubject=E-postay\\u0131 do\\u011Frula\nemailVerificationBody=Birisi bu e-posta adresiyle bir {2} hesap olu"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/messages/messages_zh_CN.properties",
"chars": 1940,
"preview": "# encoding: utf-8\nemailVerificationSubject=验证电子邮件\nemailVerificationBody=用户使用当前电子邮件注册 {2} 账户。如是本人操作,请点击以下链接完成邮箱验证\\n\\n{0}\\"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/email-test.ftl",
"chars": 88,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"emailTestBody\", realmName)}\n\n${testNewVariable}\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/email-verification-with-code.ftl",
"chars": 73,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"emailVerificationBodyCode\",code)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/email-verification.ftl",
"chars": 137,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"emailVerificationBody\",link, linkExpiration, realmName, linkExpirationFormatter("
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/event-login_error.ftl",
"chars": 89,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"eventLoginErrorBody\",event.date,event.ipAddress)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/event-remove_totp.ftl",
"chars": 90,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"eventRemoveTotpBody\",event.date, event.ipAddress)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/event-update_password.ftl",
"chars": 94,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"eventUpdatePasswordBody\",event.date, event.ipAddress)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/event-update_totp.ftl",
"chars": 90,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"eventUpdateTotpBody\",event.date, event.ipAddress)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/executeActions.ftl",
"chars": 346,
"preview": "<#ftl output_format=\"plainText\">\n<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as r"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/identity-provider-link.ftl",
"chars": 198,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"identityProviderLinkBody\", identityProviderAlias, realmName, identityProviderCon"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/text/password-reset.ftl",
"chars": 133,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"passwordResetBody\",link, linkExpiration, realmName, linkExpirationFormatter(link"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/email/theme.properties",
"chars": 68,
"preview": "locales=ca,cs,de,en,es,fr,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/cli_splash.ftl",
"chars": 217,
"preview": " _ __ _ _\n| |/ /___ _ _ ___| | ___ __ _| | __\n| ' // _ \\ | | |/ __| |/ _ \\ / _` | |/ /\n|"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/code.ftl",
"chars": 628,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n <#if code."
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/error.ftl",
"chars": 540,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayMessage=false; section>\n <#if section = \"header"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/info.ftl",
"chars": 1080,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayMessage=false; section>\n <#if section = \"header"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-config-totp-text.ftl",
"chars": 708,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"loginTotpIntro\")}\n\n${msg(\"loginTotpStep1\")}\n\n<#list totp.policy.supportedApplica"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-config-totp.ftl",
"chars": 4494,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=true displayRequiredFields=true; section>\n\n "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-idp-link-confirm.ftl",
"chars": 959,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"con"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-idp-link-email.ftl",
"chars": 727,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"ema"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-oauth-grant.ftl",
"chars": 1937,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout bodyClass=\"oauth\"; section>\n <#if section = \"header\">\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-otp.ftl",
"chars": 3839,
"preview": "<#import \"template.ftl\" as layout>\n <@layout.registrationLayout; section>\n <#if section=\"header\">\n "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-page-expired.ftl",
"chars": 520,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"pag"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-password.ftl",
"chars": 1701,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=false displayWide=false; section>\n <#if se"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-reset-password.ftl",
"chars": 2064,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=true; section>\n <#if section = \"header\">\n "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-update-password.ftl",
"chars": 2789,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=true; section>\n <#if section = \"header\">\n "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-update-profile.ftl",
"chars": 3834,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"log"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-username.ftl",
"chars": 3821,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=social.displayInfo displayWide=(realm.passwor"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-verify-email-code-text.ftl",
"chars": 75,
"preview": "<#ftl output_format=\"plainText\">\n${msg(\"console-verify-email\",email, code)}"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-verify-email.ftl",
"chars": 479,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"ema"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login-x509-info.ftl",
"chars": 2808,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"doL"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/login.ftl",
"chars": 4664,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=social.displayInfo displayWide=(realm.passwor"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_ca.properties",
"chars": 10751,
"preview": "doLogIn=Inicia sessi\\u00F3\ndoRegister=Registra''t\ndoCancel=Cancel\\u00B7lar\ndoSubmit=Envia\ndoYes=S\\u00ED\ndoNo=No\ndoContin"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_cs.properties",
"chars": 12150,
"preview": "# encoding: utf-8\ndoLogIn=Přihlásit se\ndoRegister=Registrovat se\ndoCancel=Zrušit\ndoSubmit=Odeslat\ndoYes=Ano\ndoNo=Ne\ndoCo"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_de.properties",
"chars": 14570,
"preview": "doLogIn=Anmelden\ndoRegister=Registrieren\ndoCancel=Abbrechen\ndoSubmit=Absenden\ndoYes=Ja\ndoNo=Nein\ndoContinue=Weiter\ndoIgn"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_en.properties",
"chars": 16612,
"preview": "doLogIn=Log In\ndoRegister=Register\ndoCancel=Cancel\ndoSubmit=Submit\ndoBack=Back\ndoYes=Yes\ndoNo=No\ndoContinue=Continue\ndoI"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_es.properties",
"chars": 10876,
"preview": "doLogIn=Iniciar sesi\\u00F3n\ndoRegister=Reg\\u00EDstrate\ndoCancel=Cancelar\ndoSubmit=Enviar\ndoYes=S\\u00ED\ndoNo=No\ndoContinu"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_fr.properties",
"chars": 15619,
"preview": "doLogIn=Connexion\ndoRegister=Enregistrement\ndoCancel=Annuler\ndoSubmit=Soumettre\ndoYes=Oui\ndoNo=Non\ndoContinue=Continuer\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_it.properties",
"chars": 17707,
"preview": "doLogIn=Accedi\ndoRegister=Registrati\ndoCancel=Annulla\ndoSubmit=Invia\ndoBack=Indietro\ndoYes=S\\u00ec\ndoNo=No\ndoContinue=Co"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_ja.properties",
"chars": 12771,
"preview": "# encoding: utf-8\ndoLogIn=ログイン\ndoRegister=登録\ndoCancel=キャンセル\ndoSubmit=送信\ndoBack=戻る\ndoYes=はい\ndoNo=いいえ\ndoContinue=続ける\ndoIgn"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_lt.properties",
"chars": 10846,
"preview": "# encoding: utf-8\ndoLogIn=Prisijungti\ndoRegister=Registruotis\ndoCancel=Atšaukti\ndoSubmit=Patvirtinti\ndoYes=Taip\ndoNo=Ne\n"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_nl.properties",
"chars": 14248,
"preview": "# encoding: utf-8\ndoLogIn=Inloggen\ndoRegister=Registreer\ndoCancel=Annuleer\ndoSubmit=Verzenden\ndoYes=Ja\ndoNo=Nee\ndoContin"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_no.properties",
"chars": 11523,
"preview": "doLogIn=Logg inn\ndoRegister=Registrer deg\ndoCancel=Avbryt\ndoSubmit=Send inn\ndoYes=Ja\ndoNo=Nei\ndoContinue=Fortsett\ndoAcce"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_pl.properties",
"chars": 14677,
"preview": "# encoding: UTF-8\ndoLogIn=Logowanie\ndoRegister=Rejestracja\ndoCancel=Anuluj\ndoSubmit=Zatwierdź\ndoYes=Tak\ndoNo=Nie\ndoConti"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_pt_BR.properties",
"chars": 19597,
"preview": "doLogIn=Entrar\ndoRegister=Cadastre-se\ndoCancel=Cancelar\ndoSubmit=Ok\ndoBack=Voltar\ndoYes=Sim\ndoNo=N\\u00E3o\ndoContinue=Con"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_ru.properties",
"chars": 11246,
"preview": "# encoding: utf-8\ndoLogIn=Вход\ndoRegister=Регистрация\ndoCancel=Отмена\ndoSubmit=Подтвердить\ndoYes=Да\ndoNo=Нет\ndoContinue="
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_sk.properties",
"chars": 12747,
"preview": "# encoding: utf-8\ndoLogIn=Prihlásenie\ndoRegister=Registrácia\ndoCancel=Zrušiť\ndoSubmit=Odoslať\ndoYes=Áno\ndoNo=Nie\ndoConti"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_sv.properties",
"chars": 10775,
"preview": "# encoding: utf-8\ndoLogIn=Logga in\ndoRegister=Registrera\ndoCancel=Avbryt\ndoSubmit=Skicka\ndoYes=Ja\ndoNo=Nej\ndoContinue=Fo"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_tr.properties",
"chars": 18128,
"preview": "doLogIn=Oturum a\\u00E7\ndoRegister=Kay\\u0131t ol\ndoCancel=\\u0130ptal et\ndoSubmit=G\\u00F6nder\ndoYes=Evet\ndoNo=Hay\\u0131r\nd"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/messages/messages_zh_CN.properties",
"chars": 6420,
"preview": "# encoding: utf-8\ndoLogIn=登录\ndoRegister=注册\ndoCancel=取消\ndoSubmit=提交\ndoYes=是\ndoNo=否\ndoContinue=继续\ndoAccept=接受\ndoDecline=拒绝"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/register.ftl",
"chars": 5054,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${msg(\"reg"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/resources/css/login.css",
"chars": 8880,
"preview": ".login-pf body {\n background: url(\"../img/keycloak-bg.png\") no-repeat center center fixed;\n background-size: cover"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/resources/js/base64url.js",
"chars": 3619,
"preview": "// for embedded scripts, quoted and modified from https://github.com/swansontec/rfc4648.js by William Swanson\n'use stric"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/saml-post-form.ftl",
"chars": 1112,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout; section>\n <#if section = \"header\">\n ${kcSaniti"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/select-authenticator.ftl",
"chars": 2296,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayInfo=true; section>\n <#if section = \"header\" ||"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/template.ftl",
"chars": 7640,
"preview": "<#macro registrationLayout bodyClass=\"\" displayInfo=false displayMessage=true displayRequiredFields=false displayWide=fa"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/terms.ftl",
"chars": 820,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayMessage=false; section>\n <#if section = \"header"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/theme.properties",
"chars": 3568,
"preview": "import=common/keycloak\n\nstyles=css/login.css\nstylesCommon=node_modules/patternfly/dist/css/patternfly.min.css node_modul"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/webauthn-authenticate.ftl",
"chars": 4216,
"preview": " <#import \"template.ftl\" as layout>\n <@layout.registrationLayout showAnotherWayIfPresent=false; section>\n <#if "
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/webauthn-error.ftl",
"chars": 2412,
"preview": "<#import \"template.ftl\" as layout>\n<@layout.registrationLayout displayMessage=true; section>\n <#if section = \"header\""
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/login/webauthn-register.ftl",
"chars": 7859,
"preview": " <#import \"template.ftl\" as layout>\n <@layout.registrationLayout; section>\n <#if section = \"title\">\n tit"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/welcome/index.ftl",
"chars": 6182,
"preview": "<!--\n ~ JBoss, Home of Professional Open Source.\n ~ Copyright (c) 2011, Red Hat, Inc., and individual contributors\n ~"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/welcome/resources/css/welcome.css",
"chars": 2023,
"preview": "body {\n\tbackground: #fff url(../bg.png) no-repeat center bottom fixed;\n\tbackground-size: cover;\n}\n.welcome-header {\n\tmar"
},
{
"path": "theme-minimal/src/main/resources/theme/theme-minimal/welcome/theme.properties",
"chars": 302,
"preview": "import=common/keycloak\n\nstyles=css/welcome.css\nstylesCommon=node_modules/patternfly/dist/css/patternfly.css node_modules"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the zonaut/keycloak-extensions GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 152 files (688.3 KB), approximately 204.7k tokens, and a symbol index with 114 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.