diff --git a/testsuite/integration-arquillian/pom.xml b/testsuite/integration-arquillian/pom.xml index cf8209e919..5266731c2f 100644 --- a/testsuite/integration-arquillian/pom.xml +++ b/testsuite/integration-arquillian/pom.xml @@ -78,6 +78,11 @@ wildfly-arquillian-container-managed ${arquillian-wildfly-container.version} + + org.wildfly + wildfly-arquillian-container-remote + ${arquillian-wildfly-container.version} + @@ -100,9 +105,9 @@ + test-apps servers tests - test-apps diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/common/io.xsl b/testsuite/integration-arquillian/servers/app-server/jboss/common/io.xsl new file mode 100644 index 0000000000..03d518a13e --- /dev/null +++ b/testsuite/integration-arquillian/servers/app-server/jboss/common/io.xsl @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/common/mgmt-users.properties b/testsuite/integration-arquillian/servers/app-server/jboss/common/mgmt-users.properties new file mode 100644 index 0000000000..b27edafd1d --- /dev/null +++ b/testsuite/integration-arquillian/servers/app-server/jboss/common/mgmt-users.properties @@ -0,0 +1 @@ +admin=c22052286cd5d72239a90fe193737253 diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml b/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml index 30db67f386..1f47523452 100644 --- a/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml +++ b/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml @@ -124,6 +124,61 @@ + + io-worker-threads + process-resources + + transform + + + + + ${app.server.jboss.home}/standalone/configuration + + standalone.xml + standalone-ha.xml + + ${common.resources}/io.xsl + ${app.server.jboss.home}/standalone/configuration + + + worker.io-threads + ${app.server.worker.io-threads} + + + worker.task-max-threads + ${app.server.worker.task-max-threads} + + + + + + + + + + + maven-resources-plugin + + + enable-jboss-mgmt-admin + process-resources + + copy-resources + + + ${app.server.jboss.home}/standalone/configuration + + + ${common.resources} + + mgmt-users.properties + + + + true + + diff --git a/testsuite/integration-arquillian/servers/app-server/pom.xml b/testsuite/integration-arquillian/servers/app-server/pom.xml index 9e763fb98a..17d9a3d999 100644 --- a/testsuite/integration-arquillian/servers/app-server/pom.xml +++ b/testsuite/integration-arquillian/servers/app-server/pom.xml @@ -31,6 +31,8 @@ false + ${jboss.default.worker.io-threads} + ${jboss.default.worker.task-max-threads} diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/common/io.xsl b/testsuite/integration-arquillian/servers/auth-server/jboss/common/io.xsl new file mode 100644 index 0000000000..03d518a13e --- /dev/null +++ b/testsuite/integration-arquillian/servers/auth-server/jboss/common/io.xsl @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/common/mgmt-users.properties b/testsuite/integration-arquillian/servers/auth-server/jboss/common/mgmt-users.properties new file mode 100644 index 0000000000..b27edafd1d --- /dev/null +++ b/testsuite/integration-arquillian/servers/auth-server/jboss/common/mgmt-users.properties @@ -0,0 +1 @@ +admin=c22052286cd5d72239a90fe193737253 diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/common/mod_cluster.xsl b/testsuite/integration-arquillian/servers/auth-server/jboss/common/mod_cluster.xsl new file mode 100644 index 0000000000..c5d983d50d --- /dev/null +++ b/testsuite/integration-arquillian/servers/auth-server/jboss/common/mod_cluster.xsl @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml b/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml index a64313e24f..fdc4df4033 100644 --- a/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml +++ b/testsuite/integration-arquillian/servers/auth-server/jboss/pom.xml @@ -200,9 +200,62 @@ org.codehaus.mojo xml-maven-plugin + + + io-worker-threads + process-resources + + transform + + + + + ${auth.server.home}/standalone/configuration + + standalone.xml + standalone-ha.xml + + ${common.resources}/io.xsl + ${auth.server.home}/standalone/configuration + + + worker.io-threads + ${auth.server.worker.io-threads} + + + worker.task-max-threads + ${auth.server.worker.task-max-threads} + + + + + + + maven-resources-plugin + + + enable-jboss-mgmt-admin + process-resources + + copy-resources + + + ${auth.server.home}/standalone/configuration + + + ${common.resources} + + mgmt-users.properties + + + + true + + + maven-assembly-plugin @@ -577,6 +630,25 @@ + + mod-cluster-configuration + process-resources + + transform + + + + + ${auth.server.home}/standalone/configuration + + standalone-ha.xml + + ${common.resources}/mod_cluster.xsl + ${auth.server.home}/standalone/configuration + + + + diff --git a/testsuite/integration-arquillian/servers/auth-server/pom.xml b/testsuite/integration-arquillian/servers/auth-server/pom.xml index a3328bdaef..a10cee0628 100644 --- a/testsuite/integration-arquillian/servers/auth-server/pom.xml +++ b/testsuite/integration-arquillian/servers/auth-server/pom.xml @@ -29,6 +29,11 @@ pom Auth Server + + ${jboss.default.worker.io-threads} + ${jboss.default.worker.task-max-threads} + + services jboss diff --git a/testsuite/integration-arquillian/servers/pom.xml b/testsuite/integration-arquillian/servers/pom.xml index c800f629fe..288ef46337 100644 --- a/testsuite/integration-arquillian/servers/pom.xml +++ b/testsuite/integration-arquillian/servers/pom.xml @@ -47,6 +47,8 @@ 6.2.1.redhat-084 + 16 + 128 diff --git a/testsuite/integration-arquillian/servers/wildfly-balancer/pom.xml b/testsuite/integration-arquillian/servers/wildfly-balancer/pom.xml index 262299c678..a84f20ce52 100644 --- a/testsuite/integration-arquillian/servers/wildfly-balancer/pom.xml +++ b/testsuite/integration-arquillian/servers/wildfly-balancer/pom.xml @@ -31,6 +31,8 @@ ${project.build.directory}/unpacked/wildfly-${wildfly.version} + ${jboss.default.worker.io-threads} + ${jboss.default.worker.task-max-threads} @@ -70,6 +72,35 @@ org.codehaus.mojo xml-maven-plugin + + io-worker-threads + process-resources + + transform + + + + + ${wildfly.balancer.home}/standalone/configuration + + standalone.xml + + src/main/xslt/io.xsl + ${wildfly.balancer.home}/standalone/configuration + + + worker.io-threads + ${wildfly.balancer.worker.io-threads} + + + worker.task-max-threads + ${wildfly.balancer.worker.task-max-threads} + + + + + + configure-mod-cluster process-resources diff --git a/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/io.xsl b/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/io.xsl new file mode 100644 index 0000000000..03d518a13e --- /dev/null +++ b/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/io.xsl @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/mod_cluster.xsl b/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/mod_cluster.xsl index 2079fc90f4..18853541e0 100644 --- a/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/mod_cluster.xsl +++ b/testsuite/integration-arquillian/servers/wildfly-balancer/src/main/xslt/mod_cluster.xsl @@ -17,18 +17,14 @@ - - + exclude-result-prefixes="xalan"> - + @@ -36,7 +32,7 @@ - + @@ -44,23 +40,34 @@ - + - - - + + + - + + + + + + + + + + + diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java index ea64fe24a1..75d5510abc 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java @@ -51,13 +51,15 @@ public class AppServerTestEnricher { } public static String getAppServerContextRoot(int clusterPortOffset) { + String host = System.getProperty("app.server.host", "localhost"); int httpPort = Integer.parseInt(System.getProperty("app.server.http.port")); // property must be set int httpsPort = Integer.parseInt(System.getProperty("app.server.https.port")); // property must be set - boolean sslRequired = Boolean.parseBoolean(System.getProperty("app.server.ssl.required")); - return sslRequired - ? "https://localhost:" + (httpsPort + clusterPortOffset) - : "http://localhost:" + (httpPort + clusterPortOffset); + boolean sslRequired = Boolean.parseBoolean(System.getProperty("app.server.ssl.required")); + String scheme = sslRequired ? "https" : "http"; + int port = sslRequired ? httpsPort : httpPort; + + return String.format("%s://%s:%s", scheme, host, port + clusterPortOffset); } public void updateTestContextWithAppServerInfo(@Observes(precedence = 1) BeforeClass event) { diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java index a7238c3a24..841f9039da 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java @@ -81,13 +81,15 @@ public class AuthServerTestEnricher { } public static String getAuthServerContextRoot(int clusterPortOffset) { + String host = System.getProperty("auth.server.host", "localhost"); int httpPort = Integer.parseInt(System.getProperty("auth.server.http.port")); // property must be set int httpsPort = Integer.parseInt(System.getProperty("auth.server.https.port")); // property must be set - boolean sslRequired = Boolean.parseBoolean(System.getProperty("auth.server.ssl.required")); - return sslRequired - ? "https://localhost:" + (httpsPort + clusterPortOffset) - : "http://localhost:" + (httpPort + clusterPortOffset); + boolean sslRequired = Boolean.parseBoolean(System.getProperty("auth.server.ssl.required")); + String scheme = sslRequired ? "https" : "http"; + int port = sslRequired ? httpsPort : httpPort; + + return String.format("%s://%s:%s", scheme, host, port + clusterPortOffset); } public void initializeSuiteContext(@Observes(precedence = 2) BeforeSuite event) { diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml index f1188a1137..bb603becba 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml @@ -135,6 +135,18 @@ + + + ${auth.server.remote} + org.jboss.as.arquillian.container.remote.RemoteDeployableContainer + + ${auth.server.host} + ${auth.server.management.port} + admin + admin + + + diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/pom.xml b/testsuite/integration-arquillian/tests/other/adapters/jboss/pom.xml index 42780cf1e1..5b2a9cdcf9 100644 --- a/testsuite/integration-arquillian/tests/other/adapters/jboss/pom.xml +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/pom.xml @@ -36,6 +36,7 @@ ${project.parent.basedir}/common ${app.server.home}/modules/system/add-ons/keycloak + managed @@ -85,7 +86,8 @@ org.wildfly - wildfly-arquillian-container-managed + wildfly-arquillian-container-${app.server.type} + ${arquillian-wildfly-container.version} @@ -135,4 +137,4 @@ - \ No newline at end of file + diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/README.md b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/README.md new file mode 100644 index 0000000000..a9bd7fde83 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/README.md @@ -0,0 +1,2 @@ +# + diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/pom.xml b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/pom.xml new file mode 100644 index 0000000000..03ee852bb5 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/pom.xml @@ -0,0 +1,169 @@ + + + + + + 4.0.0 + + + org.keycloak.testsuite + integration-arquillian-tests-adapters-jboss + 2.0.0.CR1-SNAPSHOT + + + integration-arquillian-tests-adapters-remote + + Adapter Tests - JBoss - Remote + + + remote + remote + true + src/test/resources/xslt/arquillian.xsl + + **/performance/htmlunit/**/*Test.java + **/performance/httpclient/**/*Test.java + + INFO + + + + + commons-io + commons-io + 2.4 + + + + + + + maven-dependency-plugin + + + copy-app-profile-jee-quickstart + generate-test-resources + + copy + + + + + org.keycloak.quickstart + keycloak-quickstart-app-profile-jee + 0.5-SNAPSHOT + war + + + ${examples.home} + true + + + + + + maven-enforcer-plugin + + + + enforce + + + + + auth-server-remote + + + + + + + + + maven-surefire-plugin + + + ${exclude.htmlunit} + ${exclude.httpclient} + + + ${logging.loginlogout} + + + + + + + + + auth-server-remote + + + + no-offset + + 0 + 8080 + 8443 + 9990 + 9999 + + + + htmlunit + + - + + + + httpclient + + - + + + + debug + + TRACE + + + + + maven-surefire-plugin + + + 1 + 10 + 0 + 30 + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/main/java/org/keycloak/testsuite/performance/page/AppProfileJEE.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/main/java/org/keycloak/testsuite/performance/page/AppProfileJEE.java new file mode 100644 index 0000000000..799c8a97bd --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/main/java/org/keycloak/testsuite/performance/page/AppProfileJEE.java @@ -0,0 +1,28 @@ +package org.keycloak.testsuite.performance.page; + +import java.net.URL; +import org.jboss.arquillian.container.test.api.OperateOnDeployment; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.keycloak.testsuite.page.AbstractPageWithInjectedUrl; + +/** + * + * @author tkyjovsk + */ +public class AppProfileJEE extends AbstractPageWithInjectedUrl { + + public static final String DEPLOYMENT_NAME = "app-profile-jee"; + + @ArquillianResource + @OperateOnDeployment(DEPLOYMENT_NAME) + private URL url; + + @Override + public URL getInjectedUrl() { + //EAP6 URL fix + URL fixedUrl = createInjectedURL(DEPLOYMENT_NAME); + return fixedUrl != null ? fixedUrl : url; + } + + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/LoginLogoutParameters.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/LoginLogoutParameters.java new file mode 100644 index 0000000000..0ca09d2994 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/LoginLogoutParameters.java @@ -0,0 +1,18 @@ +package org.keycloak.testsuite.performance; + +/** + * + * @author tkyjovsk + */ +public class LoginLogoutParameters { + + public static final Integer AVERAGE_LOGIN_TIME_LIMIT = Integer.parseInt(System.getProperty("average.login.time.limit", "500")); + public static final Integer AVERAGE_LOGOUT_TIME_LIMIT = Integer.parseInt(System.getProperty("average.logout.time.limit", "500")); + + public static final String ACCESS_REQUEST_TIME = "ACCESS_REQUEST"; + public static final String LOGIN_REQUEST_TIME = "LOGIN_REQUEST"; + public static final String LOGIN_VERIFY_REQUEST_TIME = "LOGIN_VERIFY_REQUEST"; + public static final String LOGOUT_REQUEST_TIME = "LOGOUT_REQUEST"; + public static final String LOGOUT_VERIFY_REQUEST_TIME = "LOGOUT_VERIFY_REQUEST"; + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/OperationTimeoutException.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/OperationTimeoutException.java new file mode 100644 index 0000000000..deb5026f4e --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/OperationTimeoutException.java @@ -0,0 +1,30 @@ +package org.keycloak.testsuite.performance; + +/** + * + * @author tkyjovsk + */ +public class OperationTimeoutException extends Exception { + + private final String metric; + private final long value; + + public OperationTimeoutException(String metric, Throwable cause) { + this(metric, 0, cause); + } + + public OperationTimeoutException(String metric, long value, Throwable cause) { + super(cause); + this.metric = metric; + this.value = value; + } + + public String getMetric() { + return metric; + } + + public long getValue() { + return value; + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTest.java new file mode 100644 index 0000000000..a4278e131a --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTest.java @@ -0,0 +1,215 @@ +package org.keycloak.testsuite.performance; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.jboss.logging.Logger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest; +import org.keycloak.testsuite.performance.metrics.impl.Results; +import org.keycloak.testsuite.performance.metrics.impl.ResultsWithThroughput; +import static org.keycloak.testsuite.util.WaitUtils.pause; + +/** + * PerformanceTest. + * + * @author tkyjovsk + */ +public abstract class PerformanceTest extends AbstractExampleAdapterTest { + + private final Logger LOG = Logger.getLogger(PerformanceTest.class); + + public static final Integer WARMUP_LOAD = Integer.parseInt(System.getProperty("warmup.load", "5")); + public static final Integer WARMUP_DURATION = Integer.parseInt(System.getProperty("warmup.duration", "30")); + + public static final Integer INITIAL_LOAD = Integer.parseInt(System.getProperty("initial.load", "10")); // load for the first iteration + public static final Integer LOAD_INCREASE = Integer.parseInt(System.getProperty("load.increase", "10")); // how many threads to add before each iteration + public static final Integer LOAD_INCREASE_RATE = Integer.parseInt(System.getProperty("load.increase.rate", "2")); // how fast to add the new threads per second + + public static final Integer MEASUREMENT_DURATION = Integer.parseInt(System.getProperty("measurement.duration", "20")); // duration of one measurement iteration + + public static final Integer MAX_ITERATIONS = Integer.parseInt(System.getProperty("max.iterations", "10")); + public static final Integer MAX_THREADS = Integer.parseInt(System.getProperty("max.threads", "1000")); + + public static final Integer SLEEP_BETWEEN_REPEATS = Integer.parseInt(System.getProperty("sleep.between.repeats", "0")); + + private final double AVERAGE_TIMEOUT_PERCENTAGE_LIMIT = Double.parseDouble(System.getProperty("average.timeout.percentage.limit", "0.01")); + + private int currentLoad; + + private ExecutorService executorService; + + protected PerformanceTestMetrics metrics = new PerformanceTestMetrics(); + protected PerformanceTestMetrics timeouts = new PerformanceTestMetrics(); + + protected List resultsList = new ArrayList<>(); + protected List timeoutResultsList = new ArrayList<>(); + + @Before + public void before() { + if (WARMUP_LOAD > INITIAL_LOAD) { + throw new IllegalArgumentException("'warmup.load' cannot be larger than 'initial.load'"); + } + + executorService = Executors.newFixedThreadPool(MAX_THREADS); + currentLoad = 0; + + metrics.clear(); + } + + @After + public void after() throws IOException, InterruptedException { + executorService.shutdown(); + LOG.info("Waiting for threadpool termination."); + executorService.awaitTermination(10, TimeUnit.SECONDS); + } + + @Test + public void test() { + + increaseLoadBy(WARMUP_LOAD); // increase to warmup load + warmup(); + + for (int i = 0; i < MAX_ITERATIONS; i++) { + + int loadIncrease = (i == 0) + ? INITIAL_LOAD - WARMUP_LOAD // increase from warmup to initial load + : LOAD_INCREASE; // increase load between iterations + + increaseLoadBy(loadIncrease); + measurePerformance(); + + if (!isThereEnoughThreadsForNextIteration(LOAD_INCREASE)) { + LOG.warn("Threadpool capacity reached. Stopping the test."); + break; + } + if (!isLatestResultsWithinLimits()) { + LOG.warn("The latest measurement surpassed expected limit. Stopping the test."); + break; + } + } + + } + + private void warmup() { + LOG.info("Warming up for " + WARMUP_DURATION + " s"); + pauseWithErrorChecking(WARMUP_DURATION * 1000); + } + + private boolean isThereEnoughThreadsForNextIteration(int loadIncrease) { + return currentLoad + loadIncrease <= MAX_THREADS; + } + + private void increaseLoadBy(int loadIncrease) { + if (loadIncrease < 0) { + throw new IllegalArgumentException("Cannot increase load by a negative number (" + loadIncrease + ")."); + } + if (!isThereEnoughThreadsForNextIteration(loadIncrease)) { + throw new IllegalArgumentException("Cannot increase load beyond threadpool capacity (" + MAX_THREADS + ")."); + } + if (loadIncrease > 0) { + LOG.info(String.format("Increasing load from %s to %s.", currentLoad, currentLoad + loadIncrease)); + for (int t = 0; t < loadIncrease; t++) { + executorService.submit(newRunnable()); + currentLoad++; + pauseWithErrorChecking(1000 / LOAD_INCREASE_RATE); + } + } + } + + private void measurePerformance() { + LOG.info("Measuring performance"); + LOG.info("Iteration: " + (resultsList.size() + 1)); + LOG.info("Duration: " + MEASUREMENT_DURATION + " s"); + LOG.info("Load: " + currentLoad); + + metrics.reset(); + pauseWithErrorChecking(MEASUREMENT_DURATION * 1000); + resultsList.add(metrics.computeMetrics()); + timeoutResultsList.add(timeouts.computeMetrics()); + + getLatestResults().logResults(); // to file + LOG.info("Timeouts: " + getLatestTimeoutResults()); + } + + protected ResultsWithThroughput getLatestResults() { + return resultsList.isEmpty() ? null : resultsList.get(resultsList.size() - 1); + } + + protected Results getLatestTimeoutResults() { + return timeoutResultsList.isEmpty() ? null : timeoutResultsList.get(timeoutResultsList.size() - 1); + } + + private Throwable error = null; + + public synchronized Throwable getError() { + return error; + } + + public synchronized void setError(Throwable error) { + this.error = error; + } + + protected void pauseWithErrorChecking(long millis) { + pauseWithErrorChecking(millis, 1000); + } + + protected void pauseWithErrorChecking(long millis, long checkIntervals) { + long count = millis / checkIntervals; + long remainder = millis % checkIntervals; + for (int i = 0; i < count + 1; i++) { // repeat 'count' times + once for remainder + if (i < count || remainder > 0) { // on last iteration check if any remainder + pause(checkIntervals); + if (getError() != null) { + throw new RuntimeException("PerformanceTestRunnable threw an exception. Stopping the test.", getError()); + } + } + } + } + + protected abstract boolean isLatestResultsWithinLimits(); + + protected boolean isLatestTimeoutsWithinLimits() { + boolean socketTimeoutsWithinLimits = true; + for (String metric : getLatestResults().keySet()) { + long timemoutCount = getLatestTimeoutResults().containsKey(metric) ? getLatestTimeoutResults().get(metric).getCount() : 0; + double timeoutPercentage = (double) timemoutCount / getLatestResults().get(metric).getCount(); + socketTimeoutsWithinLimits = socketTimeoutsWithinLimits && timeoutPercentage < AVERAGE_TIMEOUT_PERCENTAGE_LIMIT; + } + return socketTimeoutsWithinLimits; + } + + protected abstract Runnable newRunnable(); + + public abstract class Runnable extends RepeatRunnable { + + protected final Timer timer; + + public Runnable() { + super(SLEEP_BETWEEN_REPEATS * 1000); + this.timer = new Timer(); + } + + @Override + public void repeat() { + try { + performanceScenario(); + } catch (OperationTimeoutException ex) { + timeouts.addValue(ex.getMetric(), ex.getValue()); + LOG.debug(String.format("Operatin %s timed out. Cause: %s.", ex.getMetric(), ex.getCause())); + } catch (AssertionError | Exception ex) { + setError(ex); + throw new RuntimeException(ex); + } + } + + public abstract void performanceScenario() throws Exception; + + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTestMetrics.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTestMetrics.java new file mode 100644 index 0000000000..1ebaea33f2 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/PerformanceTestMetrics.java @@ -0,0 +1,51 @@ +package org.keycloak.testsuite.performance; + +import java.util.concurrent.ConcurrentHashMap; +import org.keycloak.testsuite.performance.metrics.ComputedMetric; +import org.keycloak.testsuite.performance.metrics.ComputedMetrics; +import org.keycloak.testsuite.performance.metrics.impl.ArrayListMetric; +import org.keycloak.testsuite.performance.metrics.impl.MovingAverageMetric; +import org.keycloak.testsuite.performance.metrics.impl.ResultsWithThroughput; + +/** + * + * @author tkyjovsk + */ +public class PerformanceTestMetrics extends ConcurrentHashMap implements ComputedMetrics { + + public static final String METRIC_MOVING_AVERAGE = "MovingAverage"; + public static final String METRIC_ARRAY_LIST = "ArrayList"; + public static final String METRIC = System.getProperty("metric", METRIC_MOVING_AVERAGE); + + Timer timer = new Timer(); + + @Override + public void reset() { + clear(); + timer.reset(); + } + + private ComputedMetric getOrCreate(String metric) { + ComputedMetric m = get(metric); + if (m == null) { + if (METRIC_ARRAY_LIST.equals(metric)) { + m = new ArrayListMetric(); + } else { + m = new MovingAverageMetric(); + } + put(metric, m); + } + return m; + } + + @Override + public void addValue(String metric, long value) { + getOrCreate(metric).addValue(value); + } + + @Override + public ResultsWithThroughput computeMetrics() { + return new ResultsWithThroughput(this, timer.getElapsedTime()); + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/RepeatRunnable.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/RepeatRunnable.java new file mode 100644 index 0000000000..f62d19608c --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/RepeatRunnable.java @@ -0,0 +1,42 @@ +package org.keycloak.testsuite.performance; + +import static org.keycloak.testsuite.util.WaitUtils.pause; + +/** + * + * @author tkyjovsk + */ +public abstract class RepeatRunnable implements Runnable { + + private long sleepBetweenRepeatsMillis; + private long repeatCounter; + + public RepeatRunnable() { + this(0); + this.repeatCounter = 0; + } + + public RepeatRunnable(long sleepBetweenRepeatsMillis) { + this.sleepBetweenRepeatsMillis = sleepBetweenRepeatsMillis; + } + + public void setSleepBetweenRepeatsMillis(long sleepBetweenRepeatsMillis) { + this.sleepBetweenRepeatsMillis = sleepBetweenRepeatsMillis; + } + + public long getRepeatCounter() { + return repeatCounter; + } + + @Override + public void run() { + while (true) { + repeat(); + repeatCounter++; + pause(sleepBetweenRepeatsMillis); + } + } + + public abstract void repeat(); + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/Timer.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/Timer.java new file mode 100644 index 0000000000..8edb326737 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/Timer.java @@ -0,0 +1,26 @@ +package org.keycloak.testsuite.performance; + +import java.util.Date; + +/** + * + * @author tkyjovsk + */ +public final class Timer { + + private long time; + + public Timer() { + reset(); + } + + public long reset() { + time = new Date().getTime(); + return time; + } + + public long getElapsedTime() { + return new Date().getTime() - time; + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitLoginLogoutPerfTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitLoginLogoutPerfTest.java new file mode 100644 index 0000000000..b2790985fa --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitLoginLogoutPerfTest.java @@ -0,0 +1,162 @@ +package org.keycloak.testsuite.performance.htmlunit; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.graphene.page.Page; +import org.jboss.logging.Logger; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Before; +import org.keycloak.representations.idm.RealmRepresentation; +import org.keycloak.testsuite.arquillian.annotation.AppServerContainer; +import org.keycloak.testsuite.performance.page.AppProfileJEE; +import org.openqa.selenium.By; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.AVERAGE_LOGIN_TIME_LIMIT; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.AVERAGE_LOGOUT_TIME_LIMIT; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGIN_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGOUT_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.ACCESS_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGIN_VERIFY_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGOUT_VERIFY_REQUEST_TIME; +import org.keycloak.testsuite.performance.PerformanceTest; +import static org.junit.Assert.assertTrue; +import org.keycloak.testsuite.performance.OperationTimeoutException; +import static org.keycloak.testsuite.util.IOUtil.loadRealm; +import org.openqa.selenium.TimeoutException; + +/** + * + * @author tkyjovsk + */ +@AppServerContainer("app-server-remote") +public class HtmlUnitLoginLogoutPerfTest extends HtmlUnitPerformanceTest { + + private static final Logger LOG = Logger.getLogger(HtmlUnitLoginLogoutPerfTest.class); + + private static final String EXAMPLES = "Examples"; + + private String unsecuredUrl; + private String securedUrl; + private String username; + private String password; + private String loginPageUrl; + + @Page + protected AppProfileJEE appProfileJEEPage; + + protected static WebArchive warDeployment(String filename) throws IOException { + return ShrinkWrap.createFromZipFile(WebArchive.class, + new File(EXAMPLES_HOME + "/" + filename + ".war")) + .addAsWebInfResource(jbossDeploymentStructure, JBOSS_DEPLOYMENT_STRUCTURE_XML); + } + + @Deployment(name = AppProfileJEE.DEPLOYMENT_NAME) + private static WebArchive appProfileJEE() throws IOException { + return warDeployment("keycloak-quickstart-app-profile-jee-0.5-SNAPSHOT"); + } + + @Override + public void setDefaultPageUriParameters() { + super.setDefaultPageUriParameters(); + testRealmPage.setAuthRealm(EXAMPLES); + } + + @Override + public void addAdapterTestRealms(List testRealms) { + testRealms.add(loadRealm("/examples-realm.json")); + } + + @Before + public void beforeLoginLogoutTest() { + unsecuredUrl = appProfileJEEPage + "/index.jsp"; + securedUrl = appProfileJEEPage + "/profile.jsp"; + username = "secure-user"; + password = "password"; + loginPageUrl = testRealmLoginPage.toString(); + } + + @Override + public PerformanceTest.Runnable newRunnable() { + return new Runnable(); + } + + @Override + protected boolean isLatestResultsWithinLimits() { + return getLatestResults().get(LOGIN_REQUEST_TIME).getAverage() < AVERAGE_LOGIN_TIME_LIMIT + && getLatestResults().get(LOGOUT_REQUEST_TIME).getAverage() < AVERAGE_LOGOUT_TIME_LIMIT; + } + + public class Runnable extends HtmlUnitPerformanceTest.Runnable { + + @Override + public void performanceScenario() throws Exception { + LOG.debug(String.format("Starting login-logout scenario #%s", getRepeatCounter())); + driver.manage().deleteAllCookies(); + + // ACCESS + LOG.trace(String.format("Accessing secured URL: %s", securedUrl)); + try { + timer.reset(); + driver.get(securedUrl); + assertTrue(driver.getCurrentUrl().startsWith(loginPageUrl)); + } catch (TimeoutException ex) { + throw new OperationTimeoutException(ACCESS_REQUEST_TIME, ex); + } + metrics.addValue(ACCESS_REQUEST_TIME, timer.getElapsedTime()); + + // LOGIN + LOG.trace("Logging in"); + try { + driver.findElement(By.id("username")).clear(); + driver.findElement(By.id("username")).sendKeys(username); + driver.findElement(By.id("password")).clear(); + driver.findElement(By.id("password")).sendKeys(password); + timer.reset(); + driver.findElement(By.name("login")).click(); + assertTrue(driver.getCurrentUrl().equals(securedUrl)); + } catch (TimeoutException ex) { + throw new OperationTimeoutException(LOGIN_REQUEST_TIME, ex); + } + metrics.addValue(LOGIN_REQUEST_TIME, timer.getElapsedTime()); + + // VERIFY LOGIN + LOG.trace("Verifying login"); + try { + timer.reset(); + driver.get(securedUrl); + assertTrue(driver.getCurrentUrl().equals(securedUrl)); + } catch (TimeoutException ex) { + throw new OperationTimeoutException(LOGIN_VERIFY_REQUEST_TIME, ex); + } + metrics.addValue(LOGIN_VERIFY_REQUEST_TIME, timer.getElapsedTime()); + + // LOGOUT + LOG.trace("Logging out"); + try { + timer.reset(); + driver.findElement(By.xpath("//button[text()='Logout']")).click(); + assertTrue(driver.getCurrentUrl().startsWith(unsecuredUrl)); + } catch (TimeoutException ex) { + throw new OperationTimeoutException(LOGOUT_REQUEST_TIME, ex); + } + metrics.addValue(LOGOUT_REQUEST_TIME, timer.getElapsedTime()); + + // VERIFY LOGOUT + LOG.trace("Verifying logout"); + try { + timer.reset(); + driver.get(securedUrl); + assertTrue(driver.getCurrentUrl().startsWith(loginPageUrl)); + } catch (TimeoutException ex) { + throw new OperationTimeoutException(LOGOUT_VERIFY_REQUEST_TIME, ex); + } + metrics.addValue(LOGOUT_VERIFY_REQUEST_TIME, timer.getElapsedTime()); + + LOG.trace("Logged out"); + } + + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitPerformanceTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitPerformanceTest.java new file mode 100644 index 0000000000..ae9dd5070f --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/htmlunit/HtmlUnitPerformanceTest.java @@ -0,0 +1,36 @@ +package org.keycloak.testsuite.performance.htmlunit; + +import com.gargoylesoftware.htmlunit.WebClient; +import org.keycloak.testsuite.performance.PerformanceTest; + +/** + * + * @author tkyjovsk + */ +public abstract class HtmlUnitPerformanceTest extends PerformanceTest { + + public abstract class Runnable extends PerformanceTest.Runnable { + + protected HtmlUnitDriver driver; + + public Runnable() { + driver = new HtmlUnitDriver(true, false); + } + + public final class HtmlUnitDriver extends org.openqa.selenium.htmlunit.HtmlUnitDriver { + + public HtmlUnitDriver(boolean javaScriptEnabled, boolean cssEnabled) { + getWebClient().getOptions().setJavaScriptEnabled(javaScriptEnabled); + getWebClient().getOptions().setCssEnabled(cssEnabled); + } + + @Override + public WebClient getWebClient() { + return super.getWebClient(); + } + + } + + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientLoginLogoutPerfTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientLoginLogoutPerfTest.java new file mode 100644 index 0000000000..2a6e301b38 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientLoginLogoutPerfTest.java @@ -0,0 +1,236 @@ +package org.keycloak.testsuite.performance.httpclient; + +import java.io.File; +import java.io.IOException; +import static java.net.HttpURLConnection.HTTP_OK; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.http.Header; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.graphene.page.Page; +import org.jboss.logging.Logger; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Before; +import org.keycloak.representations.idm.RealmRepresentation; +import org.keycloak.testsuite.arquillian.annotation.AppServerContainer; +import org.keycloak.testsuite.performance.page.AppProfileJEE; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.AVERAGE_LOGIN_TIME_LIMIT; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.AVERAGE_LOGOUT_TIME_LIMIT; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGIN_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGOUT_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.ACCESS_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGIN_VERIFY_REQUEST_TIME; +import static org.keycloak.testsuite.performance.LoginLogoutParameters.LOGOUT_VERIFY_REQUEST_TIME; +import org.keycloak.testsuite.performance.PerformanceTest; +import org.keycloak.testsuite.performance.OperationTimeoutException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.keycloak.testsuite.util.IOUtil.loadRealm; + +/** + * + * @author tkyjovsk + */ +@AppServerContainer("app-server-remote") +public class HttpClientLoginLogoutPerfTest extends HttpClientPerformanceTest { + + private static final Logger LOG = Logger.getLogger(HttpClientLoginLogoutPerfTest.class); + + private static final String EXAMPLES = "Examples"; + + private String securedUrl; + private String logoutUrl; + private String username; + private String password; + private String loginPageUrl; + + @Page + protected AppProfileJEE appProfileJEEPage; + + protected static WebArchive warDeployment(String filename) throws IOException { + return ShrinkWrap.createFromZipFile(WebArchive.class, + new File(EXAMPLES_HOME + "/" + filename + ".war")) + .addAsWebInfResource(jbossDeploymentStructure, JBOSS_DEPLOYMENT_STRUCTURE_XML); + } + + @Deployment(name = AppProfileJEE.DEPLOYMENT_NAME) + private static WebArchive appProfileJEE() throws IOException { + return warDeployment("keycloak-quickstart-app-profile-jee-0.5-SNAPSHOT"); + } + + @Override + public void setDefaultPageUriParameters() { + super.setDefaultPageUriParameters(); + testRealmPage.setAuthRealm(EXAMPLES); + } + + @Override + public void addAdapterTestRealms(List testRealms) { + testRealms.add(loadRealm("/examples-realm.json")); + } + + @Before + public void beforeLoginLogoutTest() { + securedUrl = appProfileJEEPage + "/profile.jsp"; + logoutUrl = appProfileJEEPage + "/index.jsp?logout=true"; + username = "secure-user"; + password = "password"; + loginPageUrl = testRealmLoginPage.toString(); + } + + @Override + public PerformanceTest.Runnable newRunnable() { + return new Runnable(); + } + + @Override + protected boolean isLatestResultsWithinLimits() { + return isLatestTimeoutsWithinLimits() + && getLatestResults().get(LOGIN_REQUEST_TIME).getAverage() < AVERAGE_LOGIN_TIME_LIMIT + && getLatestResults().get(LOGOUT_REQUEST_TIME).getAverage() < AVERAGE_LOGOUT_TIME_LIMIT; + } + + public class Runnable extends HttpClientPerformanceTest.Runnable { + + @Override + public void performanceScenario() throws IOException, OperationTimeoutException { + LOG.debug(String.format("Starting login-logout scenario #%s", getRepeatCounter())); + context.getCookieStore().clear(); + + // ACCESS + String pageContent; + final HttpGet getSecuredPageRequest = new HttpGet(securedUrl); + LOG.trace(String.format("Accessing secured URL: %s", getSecuredPageRequest)); + LOG.trace(getSecuredPageRequest); + timer.reset(); + try (CloseableHttpResponse r = client.execute(getSecuredPageRequest, context)) { + assertEquals(HTTP_OK, r.getStatusLine().getStatusCode()); + logRedirects(); + assertEquals(1, context.getRedirectLocations().size()); + assertTrue(getLastRedirect().toASCIIString().startsWith(loginPageUrl)); + pageContent = EntityUtils.toString(r.getEntity()); + } catch (SocketException ex) { + throw new OperationTimeoutException(ACCESS_REQUEST_TIME, ex); + } catch (SocketTimeoutException ex) { + throw new OperationTimeoutException(ACCESS_REQUEST_TIME, ex.bytesTransferred, ex); + } + metrics.addValue(ACCESS_REQUEST_TIME, timer.getElapsedTime()); + + // LOGIN + final HttpPost loginRequest = new HttpPost(getLoginUrlFromPage(pageContent)); + List credentials = new ArrayList<>(); + credentials.add(new BasicNameValuePair("username", username)); + credentials.add(new BasicNameValuePair("password", password)); + loginRequest.setEntity(new UrlEncodedFormEntity(credentials)); + + LOG.trace("Logging in"); + LOG.trace(loginRequest); + timer.reset(); + try (CloseableHttpResponse r = client.execute(loginRequest, context)) { + assertEquals(HTTP_OK, r.getStatusLine().getStatusCode()); + logRedirects(); + assertEquals(2, context.getRedirectLocations().size()); + assertTrue(getLastRedirect().toASCIIString().equals(securedUrl)); + } catch (SocketException ex) { + throw new OperationTimeoutException(LOGIN_REQUEST_TIME, ex); + } catch (SocketTimeoutException ex) { + throw new OperationTimeoutException(LOGIN_REQUEST_TIME, ex.bytesTransferred, ex); + } + metrics.addValue(LOGIN_REQUEST_TIME, timer.getElapsedTime()); + + // VERIFY LOGIN + LOG.trace("Verifying login"); + LOG.trace(getSecuredPageRequest); + timer.reset(); + try (CloseableHttpResponse r = client.execute(getSecuredPageRequest, context)) { + assertEquals(HTTP_OK, r.getStatusLine().getStatusCode()); + logRedirects(); + assertEquals(0, context.getRedirectLocations().size()); + } catch (SocketException ex) { + throw new OperationTimeoutException(LOGIN_VERIFY_REQUEST_TIME, ex); + } catch (SocketTimeoutException ex) { + throw new OperationTimeoutException(LOGIN_VERIFY_REQUEST_TIME, ex.bytesTransferred, ex); + } + metrics.addValue(LOGIN_VERIFY_REQUEST_TIME, timer.getElapsedTime()); + + // LOGOUT + final HttpGet logoutRequest = new HttpGet(logoutUrl); + LOG.trace("Logging out"); + LOG.trace(logoutRequest); + timer.reset(); + try (CloseableHttpResponse r = client.execute(logoutRequest, context)) { + assertEquals(HTTP_OK, r.getStatusLine().getStatusCode()); + logRedirects(); + assertEquals(0, context.getRedirectLocations().size()); + } catch (SocketException ex) { + throw new OperationTimeoutException(LOGOUT_REQUEST_TIME, ex); + } catch (SocketTimeoutException ex) { + throw new OperationTimeoutException(LOGOUT_REQUEST_TIME, ex.bytesTransferred, ex); + } + metrics.addValue(LOGOUT_REQUEST_TIME, timer.getElapsedTime()); + + // VERIFY LOGOUT + LOG.trace("Verifying logout"); + LOG.trace(getSecuredPageRequest); + timer.reset(); + try (CloseableHttpResponse r = client.execute(getSecuredPageRequest, context)) { + assertEquals(HTTP_OK, r.getStatusLine().getStatusCode()); + logRedirects(); + assertEquals(1, context.getRedirectLocations().size()); + assertTrue(getLastRedirect().toASCIIString().startsWith(loginPageUrl)); + } catch (SocketException ex) { + throw new OperationTimeoutException(LOGOUT_VERIFY_REQUEST_TIME, ex); + } catch (SocketTimeoutException ex) { + throw new OperationTimeoutException(LOGOUT_VERIFY_REQUEST_TIME, ex.bytesTransferred, ex); + } + metrics.addValue(LOGOUT_VERIFY_REQUEST_TIME, timer.getElapsedTime()); + + LOG.trace("Logged out"); + + } + + private URI getLastRedirect() { + return context.getRedirectLocations().get(context.getRedirectLocations().size() - 1); + } + + private void logRedirects() { + int i = 0; + for (URI uri : context.getRedirectLocations()) { + LOG.trace(String.format("--> REDIRECT %s: %s", ++i, uri.toASCIIString())); + } + } + + public String getRedirectLocation(CloseableHttpResponse r) { + Header locationHeader = r.getFirstHeader("Location"); + assertNotNull(locationHeader); + return locationHeader.getValue(); + } + + private String getLoginUrlFromPage(String content) { + String formActionRegex = "]+action\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"; + Pattern p = Pattern.compile(formActionRegex); + Matcher m = p.matcher(content); + if (m.find()) { + return m.group(1); + } else { + throw new IllegalStateException("Login url counldn't be parsed form page."); + } + } + + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientPerformanceTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientPerformanceTest.java new file mode 100644 index 0000000000..d9aafafade --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/httpclient/HttpClientPerformanceTest.java @@ -0,0 +1,112 @@ +package org.keycloak.testsuite.performance.httpclient; + +import java.io.IOException; +import org.apache.http.client.config.CookieSpecs; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpOptions; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.config.SocketConfig; +import org.apache.http.impl.client.BasicCookieStore; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultRedirectStrategy; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.junit.After; +import org.junit.Before; +import org.keycloak.testsuite.performance.PerformanceTest; +import static org.keycloak.testsuite.performance.PerformanceTest.MAX_THREADS; + +/** + * + * @author tkyjovsk + */ +public abstract class HttpClientPerformanceTest extends PerformanceTest { + + protected CloseableHttpClient client; + + public static final Integer HTTP_CLIENT_SOCKET_TIMEOUT = Integer.parseInt(System.getProperty("httpclient.socket.timeout", "10000")); + public static final Integer HTTP_CLIENT_CONNECT_TIMEOUT = Integer.parseInt(System.getProperty("httpclient.connect.timeout", "10000")); + public static final Integer HTTP_CLIENT_CONNECTION_REQUEST_TIMEOUT = Integer.parseInt(System.getProperty("httpclient.connection-request.timeout", "10000")); + + @Before + public void initializeClient() { + PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); + connectionManager.setMaxTotal(Math.max(1, MAX_THREADS / 10)); + connectionManager.setDefaultMaxPerRoute(connectionManager.getMaxTotal()); + connectionManager.setValidateAfterInactivity(10000); + connectionManager.setDefaultSocketConfig(getDefaultSocketConfig()); + + client = HttpClients.custom() + .setConnectionManager(connectionManager) + .setDefaultCookieStore(new BasicCookieStore()) + .setDefaultRequestConfig(getDefaultRequestConfig()) + .setRedirectStrategy(new CustomRedirectStrategy()) + .build(); + } + + protected SocketConfig getDefaultSocketConfig() { + return SocketConfig.copy(SocketConfig.DEFAULT) + .setSoTimeout(HTTP_CLIENT_SOCKET_TIMEOUT).build(); + } + + protected RequestConfig getDefaultRequestConfig() { + return RequestConfig.custom() + .setSocketTimeout(HTTP_CLIENT_SOCKET_TIMEOUT) + .setConnectTimeout(HTTP_CLIENT_CONNECT_TIMEOUT) + .setConnectionRequestTimeout(HTTP_CLIENT_CONNECTION_REQUEST_TIMEOUT) + .setCookieSpec(CookieSpecs.DEFAULT) + .setRedirectsEnabled(true) + .setRelativeRedirectsAllowed(true) + .setCircularRedirectsAllowed(false) + .setMaxRedirects(2) + .build(); + } + + public class CustomRedirectStrategy extends DefaultRedirectStrategy { + + private final String[] REDIRECT_METHODS; + + public CustomRedirectStrategy() { + this.REDIRECT_METHODS = new String[]{ + HttpGet.METHOD_NAME, + HttpPost.METHOD_NAME, + HttpHead.METHOD_NAME, + HttpDelete.METHOD_NAME, + HttpOptions.METHOD_NAME + }; + } + + @Override + protected boolean isRedirectable(String method) { + for (final String m : REDIRECT_METHODS) { + if (m.equalsIgnoreCase(method)) { + return true; + } + } + return false; + } + + } + + @After + public void closeClient() throws IOException { + client.close(); + } + + + public abstract class Runnable extends PerformanceTest.Runnable { + + protected HttpClientContext context; + + public Runnable() { + this.context = HttpClientContext.create(); + this.context.setCookieStore(new BasicCookieStore()); + } + + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetric.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetric.java new file mode 100644 index 0000000000..69c063bf82 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetric.java @@ -0,0 +1,12 @@ +package org.keycloak.testsuite.performance.metrics; + +/** + * + * @author tkyjovsk + */ +public interface ComputedMetric extends Metric { + + public void reset(); + public void addValue(long value); + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetrics.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetrics.java new file mode 100644 index 0000000000..d4d9cf0721 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/ComputedMetrics.java @@ -0,0 +1,13 @@ +package org.keycloak.testsuite.performance.metrics; + +/** + * + * @author tkyjovsk + */ +public interface ComputedMetrics extends Metrics { + + public void reset(); + public void addValue(String metric, long value); + public Metrics computeMetrics(); + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metric.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metric.java new file mode 100644 index 0000000000..b2a6809dfe --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metric.java @@ -0,0 +1,15 @@ +package org.keycloak.testsuite.performance.metrics; + +/** + * + * @author tkyjovsk + */ +public interface Metric { + + public long getCount(); + public long getMin(); + public long getMax(); + public double getAverage(); + public double getStandardDeviation(); + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metrics.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metrics.java new file mode 100644 index 0000000000..b893dc9d46 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/Metrics.java @@ -0,0 +1,12 @@ +package org.keycloak.testsuite.performance.metrics; + +import java.util.Map; + +/** + * + * @author tkyjovsk + * @param + */ +public interface Metrics extends Map { + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ArrayListMetric.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ArrayListMetric.java new file mode 100644 index 0000000000..b6419a5ae0 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ArrayListMetric.java @@ -0,0 +1,58 @@ +package org.keycloak.testsuite.performance.metrics.impl; + +import java.util.ArrayList; +import java.util.Collections; +import org.keycloak.testsuite.performance.metrics.ComputedMetric; + +/** + * + * @author tkyjovsk + */ +public class ArrayListMetric extends ArrayList implements ComputedMetric { + + @Override + public void reset() { + clear(); + } + + @Override + public void addValue(long value) { + add(value); + } + + @Override + public long getCount() { + return size(); + } + + @Override + public long getMin() { + return Collections.min(this); + } + + @Override + public long getMax() { + return Collections.max(this); + } + + @Override + public double getAverage() { + long sum = 0; + for (long l : this) { + sum += l; + } + return isEmpty() ? 0 : sum / size(); + } + + @Override + public double getStandardDeviation() { + double average = getAverage(); + long sumSquare = 0; + for (long l : this) { + sumSquare += l * l; + } + return isEmpty() ? 0 + : Math.sqrt(sumSquare / size() - (average * average)); + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/MovingAverageMetric.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/MovingAverageMetric.java new file mode 100644 index 0000000000..7291db453d --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/MovingAverageMetric.java @@ -0,0 +1,73 @@ +package org.keycloak.testsuite.performance.metrics.impl; + +import java.math.BigDecimal; +import org.keycloak.testsuite.performance.metrics.ComputedMetric; + +/** + * + * @author tkyjovsk + */ +public final class MovingAverageMetric implements ComputedMetric { + + private BigDecimal sum; + private BigDecimal sumSquare; + private long count; + private long min; + private long max; + + public MovingAverageMetric() { + reset(); + } + + @Override + public synchronized void reset() { + this.sum = new BigDecimal(0); + this.sumSquare = new BigDecimal(0); + count = 0; + min = Long.MAX_VALUE; + max = 0; + } + + @Override + public long getCount() { + return count; + } + + @Override + public long getMin() { + return min; + } + + @Override + public long getMax() { + return max; + } + + @Override + public synchronized double getAverage() { + return count == 0 ? 0 + : sum.longValue() / count; + } + + @Override + public synchronized double getStandardDeviation() { + double average = getAverage(); + return count == 0 ? 0 + : Math.sqrt(sumSquare.longValue() / count - (average * average)); + } + + @Override + public synchronized void addValue(long value) { + sum = sum.add(new BigDecimal(value)); + sumSquare = sumSquare.add(new BigDecimal(value * value)); + min = Math.min(min, value); + max = Math.max(max, value); + count++; + } + + @Override + public String toString() { + return Double.toString(getAverage()); + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Result.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Result.java new file mode 100644 index 0000000000..35d0c95793 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Result.java @@ -0,0 +1,70 @@ +package org.keycloak.testsuite.performance.metrics.impl; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; +import org.keycloak.testsuite.performance.metrics.Metric; + +/** + * + * @author tkyjovsk + */ +public class Result implements Metric { + + private final long count; + private final long min; + private final long max; + private final double average; + private final double standardDeviation; + + public Result(long count, long min, long max, double average, double standardDeviation) { + this.count = count; + this.min = min; + this.max = max; + this.average = average; + this.standardDeviation = standardDeviation; + } + + public Result(Metric metric) { + this( + metric.getCount(), + metric.getMin(), + metric.getMax(), + metric.getAverage(), + metric.getStandardDeviation()); + } + + @Override + public long getCount() { + return count; + } + + @Override + public long getMin() { + return min; + } + + @Override + public long getMax() { + return max; + } + + @Override + public double getAverage() { + return average; + } + + @Override + public double getStandardDeviation() { + return standardDeviation; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); + } + + public String toLogString() { + return count + " " + min + " " + max + " " + average + " " + standardDeviation; + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Results.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Results.java new file mode 100644 index 0000000000..8d4a53e9d7 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/Results.java @@ -0,0 +1,23 @@ +package org.keycloak.testsuite.performance.metrics.impl; + +import java.util.TreeMap; +import org.keycloak.testsuite.performance.metrics.ComputedMetrics; +import org.keycloak.testsuite.performance.metrics.Metrics; + +/** + * + * @author tkyjovsk + */ +public class Results extends TreeMap implements Metrics { + + public Results(ComputedMetrics metrics) { + for (String metric : metrics.keySet()) { + put(metric, new Result(metrics.get(metric))); + } + } + + public String getHeader() { + return "# Operation Count Min Max Average Standard-Deviation"; + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ResultsWithThroughput.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ResultsWithThroughput.java new file mode 100644 index 0000000000..140de6f97a --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/java/org/keycloak/testsuite/performance/metrics/impl/ResultsWithThroughput.java @@ -0,0 +1,48 @@ +package org.keycloak.testsuite.performance.metrics.impl; + +import org.jboss.logging.Logger; +import java.util.HashMap; +import java.util.Map; +import org.keycloak.testsuite.performance.metrics.ComputedMetrics; + +/** + * + * @author tkyjovsk + */ +public class ResultsWithThroughput extends Results { + + public static final Logger LOG = Logger.getLogger(ResultsWithThroughput.class); + private final Map throughput; + + public ResultsWithThroughput(ComputedMetrics metrics, long durationMillis) { + super(metrics); + throughput = new HashMap<>(); + for (String metric : keySet()) { + throughput.put(metric, (double) get(metric).getCount() / durationMillis * 1000); + } + } + + public Map getThroughput() { + return throughput; + } + + @Override + public String toString() { + return "Results: " + super.toString() + "\n" + + "Throughput: " + getThroughput(); + } + + @Override + public String getHeader() { + return super.getHeader() + " Throughput"; + + } + + public void logResults() { + LOG.info(getHeader()); + for (String metric : keySet()) { + LOG.info(metric + " " + get(metric).toLogString() + " " + getThroughput().get(metric)); + } + } + +} diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm-bak.json b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm-bak.json new file mode 100644 index 0000000000..e13a53d3ee --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm-bak.json @@ -0,0 +1,1797 @@ +{ + "id" : "Examples", + "realm" : "Examples", + "notBefore" : 0, + "revokeRefreshToken" : false, + "accessTokenLifespan" : 300, + "accessTokenLifespanForImplicitFlow" : 900, + "ssoSessionIdleTimeout" : 1800, + "ssoSessionMaxLifespan" : 36000, + "offlineSessionIdleTimeout" : 2592000, + "accessCodeLifespan" : 60, + "accessCodeLifespanUserAction" : 300, + "accessCodeLifespanLogin" : 1800, + "enabled" : true, + "sslRequired" : "external", + "registrationAllowed" : false, + "registrationEmailAsUsername" : false, + "rememberMe" : false, + "verifyEmail" : false, + "resetPasswordAllowed" : false, + "editUsernameAllowed" : false, + "bruteForceProtected" : false, + "maxFailureWaitSeconds" : 900, + "minimumQuickLoginWaitSeconds" : 60, + "waitIncrementSeconds" : 60, + "quickLoginCheckMilliSeconds" : 1000, + "maxDeltaTimeSeconds" : 43200, + "failureFactor" : 30, + "privateKey": "MIICXAIBAAKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQABAoGAfmO8gVhyBxdqlxmIuglbz8bcjQbhXJLR2EoS8ngTXmN1bo2L90M0mUKSdc7qF10LgETBzqL8jYlQIbt+e6TH8fcEpKCjUlyq0Mf/vVbfZSNaVycY13nTzo27iPyWQHK5NLuJzn1xvxxrUeXI6A2WFpGEBLbHjwpx5WQG9A+2scECQQDvdn9NE75HPTVPxBqsEd2z10TKkl9CZxu10Qby3iQQmWLEJ9LNmy3acvKrE3gMiYNWb6xHPKiIqOR1as7L24aTAkEAtyvQOlCvr5kAjVqrEKXalj0Tzewjweuxc0pskvArTI2Oo070h65GpoIKLc9jf+UA69cRtquwP93aZKtW06U8dQJAF2Y44ks/mK5+eyDqik3koCI08qaC8HYq2wVl7G2QkJ6sbAaILtcvD92ToOvyGyeE0flvmDZxMYlvaZnaQ0lcSQJBAKZU6umJi3/xeEbkJqMfeLclD27XGEFoPeNrmdx0q10Azp4NfJAY+Z8KRyQCR2BEG+oNitBOZ+YXF9KCpH3cdmECQHEigJhYg+ykOvr1aiZUMFT72HU0jnmQe2FVekuG+LJUt2Tm7GtMjTFoGpf0JwrVuZN39fOYAlo+nTixgeW7X8Y=", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "certificate" : "MIICnzCCAYcCBgFRjbxGhzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhFeGFtcGxlczAeFw0xNTEyMTAyMTEwMDVaFw0yNTEyMTAyMTExNDVaMBMxETAPBgNVBAMMCEV4YW1wbGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiGMvmVFV6yC5RquGBTErkVCS73seRqsiyB25OG5F2y36dt8RVHcmnA0jbEcSuhfTLcQIjFCY1X8NfOzQlrAEB+E41jS0Bfr0DfyhCuRb/cJ4SHKY35dKKFILn3QvHmcv6vhO5qnAGK80blWGP4CQFtbONUOMu6ZGyjirtFHCj/TNr7lAwlTSaD5ukOdt9apRkdP1xwupELdu7MXeJ4ik4+Axe4B2u6pixpIypIrY6eVt+JEPzFSB7cPQoUmE3FgW1i1Oxu+2iPJQ38ze9xr6xFTNJDQPv3unBZGR46svyX8D1Mo3pm+QgR6Z5JQNwGBS9qXkdjnI+O/N4q8+/S4s/QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQABi0R5bquA8uk2dJnRJp4+GC7vSma+CMYJ7DldTq/U6iGG1umBnzue2aWi+PPfxGtIOzWzUA536RwvZByQrVIvHNA9XpmBumBl7RpCxRcTjoa4JDATN0QPHJW0/jWa9tCNENADhykeHxUtdhCefVzUKhm8eLxmCnkVHMtvkLi20aPFzgyxSq3hAPRj/DV0zpql7VDLWYr6oQ3AjyVKuYvC/VRf79goFz3Z5F9J20kK8hqOWUZzHFMASKcHIE2IuewPVNk+cRLRAYcuxkAvEXJgskp9/8BdmjYyNtcWQuRcEDSO4lFiQ04hR1P4MnEw9IKpKEb6igxXcdS1fx5doEPJ", + "codeSecret" : "f18b75ce-66a2-4510-9245-1980efdd1cc4", + "roles" : { + "realm" : [ { + "id" : "f540ac12-b9e7-45c3-9be8-d469f1051b16", + "name" : "offline_access", + "description" : "${role_offline-access}", + "scopeParamRequired" : true, + "composite" : false + }, { + "id" : "7d14d261-4590-4f10-8830-e9f7bca923d9", + "name" : "user", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "2897aa90-8c9e-49ef-b273-7074333a45b9", + "name" : "admin", + "scopeParamRequired" : false, + "composite" : false + } ], + "client" : { + "realm-management" : [ { + "id" : "f11b2b13-d6b5-401d-9a5a-da841cc24b78", + "name" : "manage-events", + "description" : "${role_manage-events}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "63278de8-8686-4a25-97f5-bc9ca505edd9", + "name" : "view-clients", + "description" : "${role_view-clients}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "4a152ca7-7efc-4ce5-b3bd-1cae29838710", + "name" : "view-realm", + "description" : "${role_view-realm}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "109166ed-30cf-4500-beb9-9c7bc06aa67a", + "name" : "view-users", + "description" : "${role_view-users}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "e7067af6-c3f1-4439-a33d-108ec0ac99bc", + "name" : "realm-admin", + "description" : "${role_realm-admin}", + "scopeParamRequired" : false, + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "view-events", "manage-identity-providers", "impersonation", "view-clients", "manage-events", "view-realm", "view-identity-providers", "manage-users", "manage-clients", "create-client", "view-users", "manage-realm" ] + } + } + }, { + "id" : "2aaf70b6-a1a4-4a61-ad43-04f4c2a254e1", + "name" : "manage-identity-providers", + "description" : "${role_manage-identity-providers}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "73a11338-48f4-4421-acfc-730fe3f3a799", + "name" : "view-events", + "description" : "${role_view-events}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "6a8d7a84-fcc9-4a80-b948-78eeb62d1ee5", + "name" : "impersonation", + "description" : "${role_impersonation}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "d2ccaa4a-953c-4c51-9d0f-323e0e2adaf4", + "name" : "view-identity-providers", + "description" : "${role_view-identity-providers}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "e6bd5ddb-8b12-47ae-8750-199b09e14fd9", + "name" : "manage-users", + "description" : "${role_manage-users}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "c8af8ff4-c3e9-4a3d-9b01-ffd1cd81353f", + "name" : "manage-clients", + "description" : "${role_manage-clients}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "cd192455-0ac7-41f8-a375-c41d9c20967e", + "name" : "create-client", + "description" : "${role_create-client}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "cdf3138b-91e4-4993-9577-ae0b948e836f", + "name" : "manage-realm", + "description" : "${role_manage-realm}", + "scopeParamRequired" : false, + "composite" : false + } ], + "app-jee" : [ ], + "security-admin-console" : [ ], + "service-jaxrs" : [ ], + "app-profile-jee-saml" : [ ], + "app-profile-jee" : [ ], + "admin-cli" : [ ], + "app-html5" : [ ], + "broker" : [ { + "id" : "5320e8f7-9c24-4881-99d4-47d05534f166", + "name" : "read-token", + "description" : "${role_read-token}", + "scopeParamRequired" : false, + "composite" : false + } ], + "account" : [ { + "id" : "f24a5945-7751-4f5f-8d2b-733f83b89ca2", + "name" : "view-profile", + "description" : "${role_view-profile}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "4c29db3b-cd54-425f-918b-d62fd6256f49", + "name" : "manage-account", + "description" : "${role_manage-account}", + "scopeParamRequired" : false, + "composite" : false + } ], + "app-profile-html5" : [ ] + } + }, + "groups" : [ ], + "defaultRoles" : [ "offline_access" ], + "requiredCredentials" : [ "password" ], + "otpPolicyType" : "totp", + "otpPolicyAlgorithm" : "HmacSHA1", + "otpPolicyInitialCounter" : 0, + "otpPolicyDigits" : 6, + "otpPolicyLookAheadWindow" : 1, + "otpPolicyPeriod" : 30, + "users" : [ { + "id" : "5c961fa6-c93f-4d95-b620-3abf74730b10", + "createdTimestamp" : 1449782544215, + "username" : "admin-user", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "Admin", + "lastName" : "User", + "email" : "admin@user.com", + "credentials" : [ { + "type" : "password", + "hashedSaltedValue" : "nP2DTe9zXzvuzn4deQhmEqA7eKNs14tdMSaZgfdCHBmWm7mX5DHK/7C6rXjx7BZnE3uzDXKDjZsb2eQFixw9QA==", + "salt" : "uP98vzC7rZadMl1oB1YESg==", + "hashIterations" : 1, + "counter" : 0, + "digits" : 0 + } ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "user", "admin" ], + "clientRoles" : { + "account" : [ "view-profile", "manage-account" ] + }, + "groups" : [ ] + }, { + "id" : "5a5e3de6-8bbb-4a6f-b2f4-df2a39f46e4e", + "createdTimestamp" : 1449782197314, + "username" : "secure-user", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "Secure", + "lastName" : "User", + "email" : "secure@user.com", + "credentials" : [ { + "type" : "password", + "hashedSaltedValue" : "Fu+o7j8wZZE4XyR6hRxAX0v3GM8Lzrt4bHVjSCpY86o/RP5tAhBMZsLEM8iZ97eOazKTzdofj2v8qnjpOIldJg==", + "salt" : "306EQU1PC5oVl/+j9XAqrg==", + "hashIterations" : 1, + "counter" : 0, + "digits" : 0 + } ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "user" ], + "clientRoles" : { + "account" : [ "view-profile", "manage-account" ] + }, + "groups" : [ ] + } ], + "clientScopeMappings" : { + "realm-management" : [ { + "client" : "security-admin-console", + "roles" : [ "realm-admin" ] + }, { + "client" : "admin-cli", + "roles" : [ "realm-admin" ] + } ] + }, + "clients" : [ { + "id" : "2c0a2e2b-e58a-41c5-811c-8047b3059b5c", + "clientId" : "realm-management", + "name" : "${client_realm-management}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "79a77b77-0958-4a75-a5d0-a7f88d2376cb", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "f851fdbd-0f76-4a45-ac91-66a27ceaa514", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "f0787470-6265-47b4-8b18-ae9338eb2e43", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "039f4448-386c-4f3f-b691-ff71a96736d5", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "ec6f41d5-8f12-4f32-b069-1160a64fc09f", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "8f080912-609b-4cae-b892-7ceedd962293", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "8dd11379-330d-4a15-ac2c-af9f3ed4c1d7", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "f74c463c-f56c-4c10-add5-6c40a9dce522", + "clientId" : "app-jee", + "name" : "app-jee", + "description" : "app-jee", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "/app-jee/", + "baseUrl" : "http://localhost:8080/app-jee/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "7dfad209-79a0-4103-856c-d021ab7a052b", + "redirectUris" : [ "/app-jee/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "57b5cf15-7f2b-41f8-bd1f-0af62cc370cb", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "bd6ada89-d446-40e3-99d5-5f22abce773c", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "918d97f3-e3aa-4793-b353-9ba68ce893f0", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "1c6943e0-ac48-4b81-8e7e-b71219a94fe3", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "c0285e8f-a09d-4fac-88ff-8444f27c6002", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "403b483e-82c5-4bd9-b9ea-d09e9e80022f", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + } ] + }, { + "id" : "d2a31747-475f-41a2-9e75-fe1e4c03dd94", + "clientId" : "security-admin-console", + "name" : "${client_security-admin-console}", + "baseUrl" : "/auth/admin/Examples/console/index.html", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "4c9ce312-f07a-461a-8cdc-2f2cf96062d1", + "redirectUris" : [ "/auth/admin/Examples/console/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "355f43b3-4750-4409-8a48-489bb5e314d6", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "5a686b95-9b95-467d-a3b9-b7abf85484fe", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "abf9e75c-d465-464f-b945-1cfd2313f4ee", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "consentText" : "${locale}", + "config" : { + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + }, { + "id" : "dcf71134-ddcd-4215-b395-c0c6457c1e7d", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "dc4cdda7-ea73-42fa-b4b4-f91141dfd4db", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "ee8ae69b-d107-4b50-a522-14eafe993e40", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "53040785-a874-48b0-b6c5-3f73378ff993", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "60e7cc2e-0884-43a1-8ff5-7e86e199488b", + "clientId" : "service-jaxrs", + "name" : "service-jaxrs", + "description" : "service-jaxrs", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "23ee787b-e9fe-473b-aa53-ccaf1d98edaa", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "15515c6f-189d-4e1f-ae1c-255610c1217b", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "ef6db9ea-d9f2-4eb4-8efc-67b593adea56", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "1692f65c-59f9-44f6-876f-cfa06b6d08dc", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "0d42629e-ffec-4acf-93e7-30f02576f965", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "c57e082a-43b7-42db-b9fb-61c8b80c82f6", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "a0b948fe-c404-4e45-a1a4-cb2c64cc4f8c", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "b1b260e2-108c-4adb-9732-8a0e0d692459", + "clientId" : "app-profile-jee-saml", + "name" : "app-profile-jee-saml", + "description" : "app-profile-jee-saml", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "http://localhost:8080/app-profile-jee-saml/", + "baseUrl" : "http://localhost:8080/app-profile-jee-saml/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "171ee9fe-92bf-4080-8055-addfb6cc6d43", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "saml", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "f86b2e20-af97-4f3c-b427-3615fc4cfa3c", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "984fbaff-98ff-4893-8102-eef611b3d454", + "name" : "X500 surname", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "lastName", + "friendly.name" : "surname", + "attribute.name" : "urn:oid:2.5.4.4" + } + }, { + "id" : "0ddd2206-0fbf-4e21-bffc-ec0d73eb7725", + "name" : "X500 email", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "email", + "friendly.name" : "email", + "attribute.name" : "urn:oid:1.2.840.113549.1.9.1" + } + }, { + "id" : "acc82bfd-9033-4c2e-95e6-49017ae88a59", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "89ed44c1-7cf0-44f9-b098-d01b00d975b0", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "568b6670-1a5e-4996-8df8-733d0e52751d", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "591ddc4c-1482-4fd1-a9ff-826f4a4aee87", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "6f9bb8ee-e8a5-45ae-a5b5-4900453afe3c", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "79edf0eb-5ee6-4877-82c9-8bafe093bbb8", + "name" : "X500 givenName", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "firstName", + "friendly.name" : "givenName", + "attribute.name" : "urn:oid:2.5.4.42" + } + } ] + }, { + "id" : "534efc58-fca1-4c17-b99d-5a80723111e5", + "clientId" : "app-profile-jee", + "name" : "app-profile-jee", + "description" : "app-profile-jee", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "/app-profile-jee/", + "baseUrl" : "http://localhost:8080/app-profile-jee/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "4f36f31a-be9d-4f92-b982-425301bac5df", + "redirectUris" : [ "/app-profile-jee/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "c9f8b614-ea9b-44f6-93f0-ce220ad6ddfe", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "56a03f82-87a9-4833-9549-d78d5b6f2103", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "f474ef62-f007-46a5-8962-8b1481bfb860", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "b541572f-436a-4408-bb85-d8b631601e47", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "306b0092-011a-49b4-a281-9242d10f97b6", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "c8b5e83d-4f44-4ba9-a536-ffceefa7b957", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "201c1be5-776b-469a-879f-b709d8524ec1", + "clientId" : "admin-cli", + "name" : "${client_admin-cli}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "fbe821af-b7ac-42af-b3af-9ba5b6c57bf4", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : false, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "317718b2-3201-47f0-82c9-d2f7975fbe2e", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "6877e1b9-8cb1-4074-b600-95542c894c7e", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "e2f5fafb-6b11-42a6-a795-26f447c87a60", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "51aaed4e-254f-49eb-81d7-2dc591e0d46b", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "97ef8e04-cdb7-456e-b2e7-a9072c7af941", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "c1f3947d-fb60-48d7-88f4-93665325a0e4", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "36526376-011d-49e9-8f17-88e7ebdcc975", + "clientId" : "app-html5", + "name" : "app-html5", + "description" : "app-html5", + "rootUrl" : "http://localhost:8080", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "c3d0b5c9-adbd-4948-9416-86d5cd66b714", + "redirectUris" : [ "/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "6a34552a-e325-4890-8a11-ba1052a4c1f4", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "2e89927d-d26f-45c3-b2e4-792e7d047dd8", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "4a243cca-f719-4cfa-bcd3-95cd8c03eabd", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "66a9cc11-ea38-4506-a8e7-e8dfbc9a1cbd", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "6c659824-9beb-4dc1-a19a-6839d0b827a9", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "86f85aec-692e-40f7-933d-2bb60619c43e", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "ee300a81-4085-4513-987b-70d1dfbb3677", + "clientId" : "broker", + "name" : "${client_broker}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "dc5ff222-409b-4516-bdfb-b9dcad78f1be", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "48bacfc9-0b3e-46f1-a17a-eee78bb756ce", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "1d0a728a-d9dc-4604-bac3-8ead48a9cb08", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "dc0af336-ed8f-4c81-8c6c-298bddcb46bf", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "a902457d-53c4-4d18-9ff4-e5e850816eec", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "ed4b6bf5-b6e7-4842-9c28-5479808a60ca", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "4aa2c376-1530-432a-89dc-d5761545bdcd", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "095faf3a-958e-427e-940e-0c546daa2335", + "clientId" : "account", + "name" : "${client_account}", + "baseUrl" : "/auth/realms/Examples/account", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "16685ec3-779d-4c15-9024-4d5a41e6f8b5", + "defaultRoles" : [ "view-profile", "manage-account" ], + "redirectUris" : [ "/auth/realms/Examples/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "2ee2fbea-ccb5-4113-b89f-14ef742aec8b", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "c19af2b3-8cf3-4a88-93fb-15a7c977560c", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "46dca0b5-7246-4745-91e8-c87e4f9b8d49", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "c1df7e2d-e052-4836-a323-969e114ac95f", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "65a4fee1-3641-4aa3-ac76-8829c7fc410f", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "2b7287cf-9345-4950-8c7c-13539cfd958c", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "afb55cf7-28ca-4b01-80ce-39b36aef0109", + "clientId" : "app-profile-html5", + "name" : "app-profile-html5", + "description" : "app-profile-html5", + "rootUrl" : "http://localhost:8080/app-profile-html5", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "2a1879d3-c873-4705-aee9-70c7249991eb", + "redirectUris" : [ "/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "3e17ba98-4974-4361-9333-f69b5f1658cb", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "f7408fb9-f658-48be-97fd-00a1ef64ba13", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "8be7ab55-cac3-4ec7-b3b8-0a78aa89b42f", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "d46942f2-b378-4b64-83b1-e68860277ef7", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "f80e03ec-f30a-4eeb-9825-16f49313c18b", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "1a4e1d8e-7555-4363-b909-9467bd49bb7d", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + } ] + } ], + "browserSecurityHeaders" : { + "contentSecurityPolicy" : "frame-src 'self'", + "xFrameOptions" : "SAMEORIGIN" + }, + "smtpServer" : { }, + "eventsEnabled" : false, + "eventsListeners" : [ "jboss-logging" ], + "enabledEventTypes" : [ ], + "adminEventsEnabled" : false, + "adminEventsDetailsEnabled" : false, + "identityFederationEnabled" : false, + "internationalizationEnabled" : false, + "supportedLocales" : [ ], + "authenticationFlows" : [ { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "idp-email-verification", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "Verify Existing Account by Re-authentication", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-otp-form", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "browser", + "description" : "browser based authentication", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-spnego", + "autheticatorFlow" : false, + "requirement" : "DISABLED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "forms", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "alias" : "clients", + "description" : "Base authentication for clients", + "providerId" : "client-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "client-secret", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "client-jwt", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "direct grant", + "description" : "OpenID Connect Resource Owner Grant", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "direct-grant-validate-username", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "direct-grant-validate-password", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "direct-grant-validate-otp", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticatorConfig" : "create unique user config", + "authenticator" : "idp-create-user-if-unique", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "Handle Existing Account", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "alias" : "forms", + "description" : "Username, password, otp and other auth forms.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-otp-form", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "registration", + "description" : "registration flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-page-form", + "flowAlias" : "registration form", + "autheticatorFlow" : true, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + } ] + }, { + "alias" : "registration form", + "description" : "registration form", + "providerId" : "form-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-user-creation", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "registration-profile-action", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 40 + }, { + "authenticator" : "registration-password-action", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 50 + }, { + "authenticator" : "registration-recaptcha-action", + "autheticatorFlow" : false, + "requirement" : "DISABLED", + "userSetupAllowed" : false, + "priority" : 60 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "reset-credential-email", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "reset-password", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 30 + }, { + "authenticator" : "reset-otp", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 40 + } ] + } ], + "authenticatorConfig" : [ { + "alias" : "create unique user config", + "config" : { + "require.password.update.after.registration" : "false" + } + }, { + "alias" : "review profile config", + "config" : { + "update.profile.on.first.login" : "missing" + } + } ], + "requiredActions" : [ { + "alias" : "CONFIGURE_TOTP", + "name" : "Configure Totp", + "providerId" : "CONFIGURE_TOTP", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "UPDATE_PASSWORD", + "name" : "Update Password", + "providerId" : "UPDATE_PASSWORD", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "UPDATE_PROFILE", + "name" : "Update Profile", + "providerId" : "UPDATE_PROFILE", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "VERIFY_EMAIL", + "name" : "Verify Email", + "providerId" : "VERIFY_EMAIL", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "terms_and_conditions", + "name" : "Terms and Conditions", + "providerId" : "terms_and_conditions", + "enabled" : false, + "defaultAction" : false, + "config" : { } + } ], + "browserFlow" : "browser", + "registrationFlow" : "registration", + "directGrantFlow" : "direct grant", + "resetCredentialsFlow" : "reset credentials", + "clientAuthenticationFlow" : "clients" +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm.json b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm.json new file mode 100644 index 0000000000..1f7d5fade6 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/examples-realm.json @@ -0,0 +1,1795 @@ +{ + "id" : "Examples", + "realm" : "Examples", + "notBefore" : 0, + "revokeRefreshToken" : false, + "accessTokenLifespan" : 300, + "accessTokenLifespanForImplicitFlow" : 900, + "ssoSessionIdleTimeout" : 1800, + "ssoSessionMaxLifespan" : 36000, + "offlineSessionIdleTimeout" : 2592000, + "accessCodeLifespan" : 60, + "accessCodeLifespanUserAction" : 300, + "accessCodeLifespanLogin" : 1800, + "enabled" : true, + "sslRequired" : "external", + "registrationAllowed" : false, + "registrationEmailAsUsername" : false, + "rememberMe" : false, + "verifyEmail" : false, + "resetPasswordAllowed" : false, + "editUsernameAllowed" : false, + "bruteForceProtected" : false, + "maxFailureWaitSeconds" : 900, + "minimumQuickLoginWaitSeconds" : 60, + "waitIncrementSeconds" : 60, + "quickLoginCheckMilliSeconds" : 1000, + "maxDeltaTimeSeconds" : 43200, + "failureFactor" : 30, + "privateKey": "MIICXAIBAAKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQABAoGAfmO8gVhyBxdqlxmIuglbz8bcjQbhXJLR2EoS8ngTXmN1bo2L90M0mUKSdc7qF10LgETBzqL8jYlQIbt+e6TH8fcEpKCjUlyq0Mf/vVbfZSNaVycY13nTzo27iPyWQHK5NLuJzn1xvxxrUeXI6A2WFpGEBLbHjwpx5WQG9A+2scECQQDvdn9NE75HPTVPxBqsEd2z10TKkl9CZxu10Qby3iQQmWLEJ9LNmy3acvKrE3gMiYNWb6xHPKiIqOR1as7L24aTAkEAtyvQOlCvr5kAjVqrEKXalj0Tzewjweuxc0pskvArTI2Oo070h65GpoIKLc9jf+UA69cRtquwP93aZKtW06U8dQJAF2Y44ks/mK5+eyDqik3koCI08qaC8HYq2wVl7G2QkJ6sbAaILtcvD92ToOvyGyeE0flvmDZxMYlvaZnaQ0lcSQJBAKZU6umJi3/xeEbkJqMfeLclD27XGEFoPeNrmdx0q10Azp4NfJAY+Z8KRyQCR2BEG+oNitBOZ+YXF9KCpH3cdmECQHEigJhYg+ykOvr1aiZUMFT72HU0jnmQe2FVekuG+LJUt2Tm7GtMjTFoGpf0JwrVuZN39fOYAlo+nTixgeW7X8Y=", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "roles" : { + "realm" : [ { + "id" : "f540ac12-b9e7-45c3-9be8-d469f1051b16", + "name" : "offline_access", + "description" : "${role_offline-access}", + "scopeParamRequired" : true, + "composite" : false + }, { + "id" : "7d14d261-4590-4f10-8830-e9f7bca923d9", + "name" : "user", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "2897aa90-8c9e-49ef-b273-7074333a45b9", + "name" : "admin", + "scopeParamRequired" : false, + "composite" : false + } ], + "client" : { + "realm-management" : [ { + "id" : "f11b2b13-d6b5-401d-9a5a-da841cc24b78", + "name" : "manage-events", + "description" : "${role_manage-events}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "63278de8-8686-4a25-97f5-bc9ca505edd9", + "name" : "view-clients", + "description" : "${role_view-clients}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "4a152ca7-7efc-4ce5-b3bd-1cae29838710", + "name" : "view-realm", + "description" : "${role_view-realm}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "109166ed-30cf-4500-beb9-9c7bc06aa67a", + "name" : "view-users", + "description" : "${role_view-users}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "e7067af6-c3f1-4439-a33d-108ec0ac99bc", + "name" : "realm-admin", + "description" : "${role_realm-admin}", + "scopeParamRequired" : false, + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "view-events", "manage-identity-providers", "impersonation", "view-clients", "manage-events", "view-realm", "view-identity-providers", "manage-users", "manage-clients", "create-client", "view-users", "manage-realm" ] + } + } + }, { + "id" : "2aaf70b6-a1a4-4a61-ad43-04f4c2a254e1", + "name" : "manage-identity-providers", + "description" : "${role_manage-identity-providers}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "73a11338-48f4-4421-acfc-730fe3f3a799", + "name" : "view-events", + "description" : "${role_view-events}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "6a8d7a84-fcc9-4a80-b948-78eeb62d1ee5", + "name" : "impersonation", + "description" : "${role_impersonation}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "d2ccaa4a-953c-4c51-9d0f-323e0e2adaf4", + "name" : "view-identity-providers", + "description" : "${role_view-identity-providers}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "e6bd5ddb-8b12-47ae-8750-199b09e14fd9", + "name" : "manage-users", + "description" : "${role_manage-users}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "c8af8ff4-c3e9-4a3d-9b01-ffd1cd81353f", + "name" : "manage-clients", + "description" : "${role_manage-clients}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "cd192455-0ac7-41f8-a375-c41d9c20967e", + "name" : "create-client", + "description" : "${role_create-client}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "cdf3138b-91e4-4993-9577-ae0b948e836f", + "name" : "manage-realm", + "description" : "${role_manage-realm}", + "scopeParamRequired" : false, + "composite" : false + } ], + "app-jee" : [ ], + "security-admin-console" : [ ], + "service-jaxrs" : [ ], + "app-profile-jee-saml" : [ ], + "app-profile-jee" : [ ], + "admin-cli" : [ ], + "app-html5" : [ ], + "broker" : [ { + "id" : "5320e8f7-9c24-4881-99d4-47d05534f166", + "name" : "read-token", + "description" : "${role_read-token}", + "scopeParamRequired" : false, + "composite" : false + } ], + "account" : [ { + "id" : "f24a5945-7751-4f5f-8d2b-733f83b89ca2", + "name" : "view-profile", + "description" : "${role_view-profile}", + "scopeParamRequired" : false, + "composite" : false + }, { + "id" : "4c29db3b-cd54-425f-918b-d62fd6256f49", + "name" : "manage-account", + "description" : "${role_manage-account}", + "scopeParamRequired" : false, + "composite" : false + } ], + "app-profile-html5" : [ ] + } + }, + "groups" : [ ], + "defaultRoles" : [ "offline_access" ], + "requiredCredentials" : [ "password" ], + "otpPolicyType" : "totp", + "otpPolicyAlgorithm" : "HmacSHA1", + "otpPolicyInitialCounter" : 0, + "otpPolicyDigits" : 6, + "otpPolicyLookAheadWindow" : 1, + "otpPolicyPeriod" : 30, + "users" : [ { + "id" : "5c961fa6-c93f-4d95-b620-3abf74730b10", + "createdTimestamp" : 1449782544215, + "username" : "admin-user", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "Admin", + "lastName" : "User", + "email" : "admin@user.com", + "credentials" : [ { + "type" : "password", + "hashedSaltedValue" : "nP2DTe9zXzvuzn4deQhmEqA7eKNs14tdMSaZgfdCHBmWm7mX5DHK/7C6rXjx7BZnE3uzDXKDjZsb2eQFixw9QA==", + "salt" : "uP98vzC7rZadMl1oB1YESg==", + "hashIterations" : 1, + "counter" : 0, + "digits" : 0 + } ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "user", "admin" ], + "clientRoles" : { + "account" : [ "view-profile", "manage-account" ] + }, + "groups" : [ ] + }, { + "id" : "5a5e3de6-8bbb-4a6f-b2f4-df2a39f46e4e", + "createdTimestamp" : 1449782197314, + "username" : "secure-user", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "firstName" : "Secure", + "lastName" : "User", + "email" : "secure@user.com", + "credentials" : [ { + "type" : "password", + "hashedSaltedValue" : "Fu+o7j8wZZE4XyR6hRxAX0v3GM8Lzrt4bHVjSCpY86o/RP5tAhBMZsLEM8iZ97eOazKTzdofj2v8qnjpOIldJg==", + "salt" : "306EQU1PC5oVl/+j9XAqrg==", + "hashIterations" : 1, + "counter" : 0, + "digits" : 0 + } ], + "requiredActions" : [ ], + "realmRoles" : [ "offline_access", "user" ], + "clientRoles" : { + "account" : [ "view-profile", "manage-account" ] + }, + "groups" : [ ] + } ], + "clientScopeMappings" : { + "realm-management" : [ { + "client" : "security-admin-console", + "roles" : [ "realm-admin" ] + }, { + "client" : "admin-cli", + "roles" : [ "realm-admin" ] + } ] + }, + "clients" : [ { + "id" : "2c0a2e2b-e58a-41c5-811c-8047b3059b5c", + "clientId" : "realm-management", + "name" : "${client_realm-management}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "79a77b77-0958-4a75-a5d0-a7f88d2376cb", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "f851fdbd-0f76-4a45-ac91-66a27ceaa514", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "f0787470-6265-47b4-8b18-ae9338eb2e43", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "039f4448-386c-4f3f-b691-ff71a96736d5", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "ec6f41d5-8f12-4f32-b069-1160a64fc09f", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "8f080912-609b-4cae-b892-7ceedd962293", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "8dd11379-330d-4a15-ac2c-af9f3ed4c1d7", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "f74c463c-f56c-4c10-add5-6c40a9dce522", + "clientId" : "app-jee", + "name" : "app-jee", + "description" : "app-jee", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "/app-jee/", + "baseUrl" : "http://localhost:8080/app-jee/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "7dfad209-79a0-4103-856c-d021ab7a052b", + "redirectUris" : [ "/app-jee/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "57b5cf15-7f2b-41f8-bd1f-0af62cc370cb", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "bd6ada89-d446-40e3-99d5-5f22abce773c", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "918d97f3-e3aa-4793-b353-9ba68ce893f0", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "1c6943e0-ac48-4b81-8e7e-b71219a94fe3", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "c0285e8f-a09d-4fac-88ff-8444f27c6002", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "403b483e-82c5-4bd9-b9ea-d09e9e80022f", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + } ] + }, { + "id" : "d2a31747-475f-41a2-9e75-fe1e4c03dd94", + "clientId" : "security-admin-console", + "name" : "${client_security-admin-console}", + "baseUrl" : "/auth/admin/Examples/console/index.html", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "4c9ce312-f07a-461a-8cdc-2f2cf96062d1", + "redirectUris" : [ "/auth/admin/Examples/console/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "355f43b3-4750-4409-8a48-489bb5e314d6", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "5a686b95-9b95-467d-a3b9-b7abf85484fe", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "abf9e75c-d465-464f-b945-1cfd2313f4ee", + "name" : "locale", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "consentText" : "${locale}", + "config" : { + "user.attribute" : "locale", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "locale", + "jsonType.label" : "String" + } + }, { + "id" : "dcf71134-ddcd-4215-b395-c0c6457c1e7d", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "dc4cdda7-ea73-42fa-b4b4-f91141dfd4db", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "ee8ae69b-d107-4b50-a522-14eafe993e40", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "53040785-a874-48b0-b6c5-3f73378ff993", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "60e7cc2e-0884-43a1-8ff5-7e86e199488b", + "clientId" : "service-jaxrs", + "name" : "service-jaxrs", + "description" : "service-jaxrs", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "23ee787b-e9fe-473b-aa53-ccaf1d98edaa", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "15515c6f-189d-4e1f-ae1c-255610c1217b", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "ef6db9ea-d9f2-4eb4-8efc-67b593adea56", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "1692f65c-59f9-44f6-876f-cfa06b6d08dc", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "0d42629e-ffec-4acf-93e7-30f02576f965", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "c57e082a-43b7-42db-b9fb-61c8b80c82f6", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "a0b948fe-c404-4e45-a1a4-cb2c64cc4f8c", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "b1b260e2-108c-4adb-9732-8a0e0d692459", + "clientId" : "app-profile-jee-saml", + "name" : "app-profile-jee-saml", + "description" : "app-profile-jee-saml", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "http://localhost:8080/app-profile-jee-saml/", + "baseUrl" : "http://localhost:8080/app-profile-jee-saml/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "171ee9fe-92bf-4080-8055-addfb6cc6d43", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "saml", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "f86b2e20-af97-4f3c-b427-3615fc4cfa3c", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "984fbaff-98ff-4893-8102-eef611b3d454", + "name" : "X500 surname", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "lastName", + "friendly.name" : "surname", + "attribute.name" : "urn:oid:2.5.4.4" + } + }, { + "id" : "0ddd2206-0fbf-4e21-bffc-ec0d73eb7725", + "name" : "X500 email", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "email", + "friendly.name" : "email", + "attribute.name" : "urn:oid:1.2.840.113549.1.9.1" + } + }, { + "id" : "acc82bfd-9033-4c2e-95e6-49017ae88a59", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "89ed44c1-7cf0-44f9-b098-d01b00d975b0", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "568b6670-1a5e-4996-8df8-733d0e52751d", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "591ddc4c-1482-4fd1-a9ff-826f4a4aee87", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "6f9bb8ee-e8a5-45ae-a5b5-4900453afe3c", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "79edf0eb-5ee6-4877-82c9-8bafe093bbb8", + "name" : "X500 givenName", + "protocol" : "saml", + "protocolMapper" : "saml-user-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "attribute.nameformat" : "urn:oasis:names:tc:SAML:2.0:attrname-format:uri", + "user.attribute" : "firstName", + "friendly.name" : "givenName", + "attribute.name" : "urn:oid:2.5.4.42" + } + } ] + }, { + "id" : "534efc58-fca1-4c17-b99d-5a80723111e5", + "clientId" : "app-profile-jee", + "name" : "app-profile-jee", + "description" : "app-profile-jee", + "rootUrl" : "http://localhost:8080", + "adminUrl" : "/app-profile-jee/", + "baseUrl" : "http://localhost:8080/app-profile-jee/", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "4f36f31a-be9d-4f92-b982-425301bac5df", + "redirectUris" : [ "/app-profile-jee/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "c9f8b614-ea9b-44f6-93f0-ce220ad6ddfe", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "56a03f82-87a9-4833-9549-d78d5b6f2103", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "f474ef62-f007-46a5-8962-8b1481bfb860", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "b541572f-436a-4408-bb85-d8b631601e47", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "306b0092-011a-49b4-a281-9242d10f97b6", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "c8b5e83d-4f44-4ba9-a536-ffceefa7b957", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "201c1be5-776b-469a-879f-b709d8524ec1", + "clientId" : "admin-cli", + "name" : "${client_admin-cli}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "fbe821af-b7ac-42af-b3af-9ba5b6c57bf4", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : false, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "317718b2-3201-47f0-82c9-d2f7975fbe2e", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "6877e1b9-8cb1-4074-b600-95542c894c7e", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "e2f5fafb-6b11-42a6-a795-26f447c87a60", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "51aaed4e-254f-49eb-81d7-2dc591e0d46b", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "97ef8e04-cdb7-456e-b2e7-a9072c7af941", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "c1f3947d-fb60-48d7-88f4-93665325a0e4", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "36526376-011d-49e9-8f17-88e7ebdcc975", + "clientId" : "app-html5", + "name" : "app-html5", + "description" : "app-html5", + "rootUrl" : "http://localhost:8080", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "c3d0b5c9-adbd-4948-9416-86d5cd66b714", + "redirectUris" : [ "/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "6a34552a-e325-4890-8a11-ba1052a4c1f4", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "2e89927d-d26f-45c3-b2e4-792e7d047dd8", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "4a243cca-f719-4cfa-bcd3-95cd8c03eabd", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "66a9cc11-ea38-4506-a8e7-e8dfbc9a1cbd", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "6c659824-9beb-4dc1-a19a-6839d0b827a9", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "86f85aec-692e-40f7-933d-2bb60619c43e", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "ee300a81-4085-4513-987b-70d1dfbb3677", + "clientId" : "broker", + "name" : "${client_broker}", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "dc5ff222-409b-4516-bdfb-b9dcad78f1be", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "48bacfc9-0b3e-46f1-a17a-eee78bb756ce", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "1d0a728a-d9dc-4604-bac3-8ead48a9cb08", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "dc0af336-ed8f-4c81-8c6c-298bddcb46bf", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "a902457d-53c4-4d18-9ff4-e5e850816eec", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "ed4b6bf5-b6e7-4842-9c28-5479808a60ca", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "4aa2c376-1530-432a-89dc-d5761545bdcd", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + } ] + }, { + "id" : "095faf3a-958e-427e-940e-0c546daa2335", + "clientId" : "account", + "name" : "${client_account}", + "baseUrl" : "/auth/realms/Examples/account", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "16685ec3-779d-4c15-9024-4d5a41e6f8b5", + "defaultRoles" : [ "view-profile", "manage-account" ], + "redirectUris" : [ "/auth/realms/Examples/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "attributes" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "2ee2fbea-ccb5-4113-b89f-14ef742aec8b", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "c19af2b3-8cf3-4a88-93fb-15a7c977560c", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "46dca0b5-7246-4745-91e8-c87e4f9b8d49", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + }, { + "id" : "c1df7e2d-e052-4836-a323-969e114ac95f", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "65a4fee1-3641-4aa3-ac76-8829c7fc410f", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "2b7287cf-9345-4950-8c7c-13539cfd958c", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + } ] + }, { + "id" : "afb55cf7-28ca-4b01-80ce-39b36aef0109", + "clientId" : "app-profile-html5", + "name" : "app-profile-html5", + "description" : "app-profile-html5", + "rootUrl" : "http://localhost:8080/app-profile-html5", + "surrogateAuthRequired" : false, + "enabled" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "2a1879d3-c873-4705-aee9-70c7249991eb", + "redirectUris" : [ "/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "saml.assertion.signature" : "false", + "saml.force.post.binding" : "false", + "saml.multivalued.roles" : "false", + "saml.signature.algorithm" : "RSA_SHA256", + "saml.encrypt" : "false", + "saml_force_name_id_format" : "false", + "saml.client.signature" : "false", + "saml.authnstatement" : "true", + "saml_name_id_format" : "username", + "saml.server.signature" : "false", + "saml_signature_canonicalization_method" : "http://www.w3.org/2001/10/xml-exc-c14n#" + }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "3e17ba98-4974-4361-9333-f69b5f1658cb", + "name" : "full name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-full-name-mapper", + "consentRequired" : true, + "consentText" : "${fullName}", + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true" + } + }, { + "id" : "f7408fb9-f658-48be-97fd-00a1ef64ba13", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + }, { + "id" : "8be7ab55-cac3-4ec7-b3b8-0a78aa89b42f", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${username}", + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "jsonType.label" : "String" + } + }, { + "id" : "d46942f2-b378-4b64-83b1-e68860277ef7", + "name" : "email", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${email}", + "config" : { + "user.attribute" : "email", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "email", + "jsonType.label" : "String" + } + }, { + "id" : "f80e03ec-f30a-4eeb-9825-16f49313c18b", + "name" : "given name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${givenName}", + "config" : { + "user.attribute" : "firstName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "given_name", + "jsonType.label" : "String" + } + }, { + "id" : "1a4e1d8e-7555-4363-b909-9467bd49bb7d", + "name" : "family name", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : true, + "consentText" : "${familyName}", + "config" : { + "user.attribute" : "lastName", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "family_name", + "jsonType.label" : "String" + } + } ] + } ], + "browserSecurityHeaders" : { + "contentSecurityPolicy" : "frame-src 'self'", + "xFrameOptions" : "SAMEORIGIN" + }, + "smtpServer" : { }, + "eventsEnabled" : false, + "eventsListeners" : [ "jboss-logging" ], + "enabledEventTypes" : [ ], + "adminEventsEnabled" : false, + "adminEventsDetailsEnabled" : false, + "identityFederationEnabled" : false, + "internationalizationEnabled" : false, + "supportedLocales" : [ ], + "authenticationFlows" : [ { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "idp-email-verification", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "Verify Existing Account by Re-authentication", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-otp-form", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "browser", + "description" : "browser based authentication", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-spnego", + "autheticatorFlow" : false, + "requirement" : "DISABLED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "forms", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "alias" : "clients", + "description" : "Base authentication for clients", + "providerId" : "client-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "client-secret", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "client-jwt", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "direct grant", + "description" : "OpenID Connect Resource Owner Grant", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "direct-grant-validate-username", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "direct-grant-validate-password", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "direct-grant-validate-otp", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticatorConfig" : "create unique user config", + "authenticator" : "idp-create-user-if-unique", + "autheticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "flowAlias" : "Handle Existing Account", + "autheticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "userSetupAllowed" : false, + "priority" : 30 + } ] + }, { + "alias" : "forms", + "description" : "Username, password, otp and other auth forms.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "auth-otp-form", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 20 + } ] + }, { + "alias" : "registration", + "description" : "registration flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-page-form", + "flowAlias" : "registration form", + "autheticatorFlow" : true, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + } ] + }, { + "alias" : "registration form", + "description" : "registration form", + "providerId" : "form-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-user-creation", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "registration-profile-action", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 40 + }, { + "authenticator" : "registration-password-action", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 50 + }, { + "authenticator" : "registration-recaptcha-action", + "autheticatorFlow" : false, + "requirement" : "DISABLED", + "userSetupAllowed" : false, + "priority" : 60 + } ] + }, { + "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", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 10 + }, { + "authenticator" : "reset-credential-email", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 20 + }, { + "authenticator" : "reset-password", + "autheticatorFlow" : false, + "requirement" : "REQUIRED", + "userSetupAllowed" : false, + "priority" : 30 + }, { + "authenticator" : "reset-otp", + "autheticatorFlow" : false, + "requirement" : "OPTIONAL", + "userSetupAllowed" : false, + "priority" : 40 + } ] + } ], + "authenticatorConfig" : [ { + "alias" : "create unique user config", + "config" : { + "require.password.update.after.registration" : "false" + } + }, { + "alias" : "review profile config", + "config" : { + "update.profile.on.first.login" : "missing" + } + } ], + "requiredActions" : [ { + "alias" : "CONFIGURE_TOTP", + "name" : "Configure Totp", + "providerId" : "CONFIGURE_TOTP", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "UPDATE_PASSWORD", + "name" : "Update Password", + "providerId" : "UPDATE_PASSWORD", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "UPDATE_PROFILE", + "name" : "Update Profile", + "providerId" : "UPDATE_PROFILE", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "VERIFY_EMAIL", + "name" : "Verify Email", + "providerId" : "VERIFY_EMAIL", + "enabled" : true, + "defaultAction" : false, + "config" : { } + }, { + "alias" : "terms_and_conditions", + "name" : "Terms and Conditions", + "providerId" : "terms_and_conditions", + "enabled" : false, + "defaultAction" : false, + "config" : { } + } ], + "browserFlow" : "browser", + "registrationFlow" : "registration", + "directGrantFlow" : "direct grant", + "resetCredentialsFlow" : "reset credentials", + "clientAuthenticationFlow" : "clients" +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/log4j.properties b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/log4j.properties new file mode 100644 index 0000000000..7c833eee85 --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/log4j.properties @@ -0,0 +1,30 @@ +log4j.rootLogger=INFO, DEFAULT + +# TEST RUN + +log4j.appender.DEFAULT=org.apache.log4j.ConsoleAppender +log4j.appender.DEFAULT.layout=org.apache.log4j.PatternLayout +log4j.appender.DEFAULT.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] [%t] %m%n + +log4j.logger.org.keycloak=OFF +log4j.logger.org.keycloak.testsuite=INFO + +# HtmlUnit +log4j.logger.org.keycloak.testsuite.performance.htmlunit.HtmlUnitLoginLogoutPerfTest=${logging.loginlogout} +log4j.logger.com.gargoylesoftware.htmlunit=OFF + +# HttpClient +log4j.logger.org.keycloak.testsuite.performance.httpclient.HttpClientLoginLogoutPerfTest=${logging.loginlogout} +log4j.logger.org.keycloak.testsuite.performance.httpclient.HttpClientPerformanceTest$CustomRedirectStrategy=OFF + + +# RESULTS + +log4j.appender.RESULTS=org.apache.log4j.FileAppender +log4j.appender.RESULTS.file=target/results.log +log4j.appender.RESULTS.immediateFlush=true +log4j.appender.RESULTS.append=true +log4j.appender.RESULTS.layout=org.apache.log4j.PatternLayout +log4j.appender.RESULTS.layout.ConversionPattern=%d{HHmmss} %m%n + +log4j.logger.org.keycloak.testsuite.performance.metrics.impl.ResultsWithThroughput=INFO, RESULTS diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/xslt/arquillian.xsl b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/xslt/arquillian.xsl new file mode 100644 index 0000000000..9da934154e --- /dev/null +++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/remote/src/test/resources/xslt/arquillian.xsl @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + org.jboss.as.arquillian.container.remote.RemoteDeployableContainer + + ${app.server.host} + ${app.server.management.port} + admin + admin + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/other/adapters/pom.xml b/testsuite/integration-arquillian/tests/other/adapters/pom.xml index 4189dad2e9..97f367904f 100644 --- a/testsuite/integration-arquillian/tests/other/adapters/pom.xml +++ b/testsuite/integration-arquillian/tests/other/adapters/pom.xml @@ -42,6 +42,7 @@ manual + localhost 200 8280 8643 @@ -143,6 +144,7 @@ ${app.server.mode} + ${app.server.host} ${app.server.port.offset} ${app.server.http.port} ${app.server.https.port} diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml index 4d53e7431d..cf7a3d413c 100755 --- a/testsuite/integration-arquillian/tests/pom.xml +++ b/testsuite/integration-arquillian/tests/pom.xml @@ -46,6 +46,7 @@ ${containers.home}/${auth.server.container} ${auth.server.home} + localhost 100 8180 8089 @@ -60,6 +61,8 @@ ${auth.server.undertow} 300 + false + ${project.build.directory}/examples @@ -142,6 +145,7 @@ ${auth.server.home} ${auth.server.java.home} + ${auth.server.host} ${auth.server.port.offset} ${auth.server.http.port} ${auth.server.events.http.port} @@ -154,6 +158,8 @@ ${frontend.console.output} ${backend.console.output} + ${auth.server.remote} + ${adapter.test.props} ${testsuite.constants} @@ -176,6 +182,23 @@ + + auth-server-remote + + remote + true + false + true + + + + org.wildfly + wildfly-arquillian-container-remote + ${arquillian-wildfly-container.version} + + + + auth-server-wildfly @@ -866,6 +889,17 @@ + + no-offset + + 0 + 8080 + 8443 + 9990 + 9999 + + +