diff --git a/adapters/oidc/jetty/jetty-core/src/main/java/org/keycloak/adapters/jetty/core/AbstractKeycloakJettyAuthenticator.java b/adapters/oidc/jetty/jetty-core/src/main/java/org/keycloak/adapters/jetty/core/AbstractKeycloakJettyAuthenticator.java index 56d8f512980..d732714a1d3 100755 --- a/adapters/oidc/jetty/jetty-core/src/main/java/org/keycloak/adapters/jetty/core/AbstractKeycloakJettyAuthenticator.java +++ b/adapters/oidc/jetty/jetty-core/src/main/java/org/keycloak/adapters/jetty/core/AbstractKeycloakJettyAuthenticator.java @@ -340,13 +340,13 @@ public abstract class AbstractKeycloakJettyAuthenticator extends LoginAuthentica Authentication authentication = request.getAuthentication(); if (!(authentication instanceof KeycloakAuthentication)) { UserIdentity userIdentity = createIdentity(principal); - authentication = createAuthentication(userIdentity); + authentication = createAuthentication(userIdentity, request); request.setAuthentication(authentication); } return authentication; } - protected abstract Authentication createAuthentication(UserIdentity userIdentity); + protected abstract Authentication createAuthentication(UserIdentity userIdentity, Request request); public static abstract class KeycloakAuthentication extends UserAuthentication { public KeycloakAuthentication(String method, UserIdentity userIdentity) { diff --git a/adapters/oidc/jetty/jetty8.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java b/adapters/oidc/jetty/jetty8.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java index ae149319c23..681f7752317 100755 --- a/adapters/oidc/jetty/jetty8.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java +++ b/adapters/oidc/jetty/jetty8.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java @@ -50,7 +50,7 @@ public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticat } @Override - protected Authentication createAuthentication(UserIdentity userIdentity) { + protected Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/oidc/jetty/jetty9.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java b/adapters/oidc/jetty/jetty9.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java index 6ca324e0fcc..0df8e735126 100755 --- a/adapters/oidc/jetty/jetty9.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java +++ b/adapters/oidc/jetty/jetty9.1/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java @@ -52,7 +52,7 @@ public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticat } @Override - protected Authentication createAuthentication(UserIdentity userIdentity) { + protected Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/oidc/jetty/jetty9.2/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java b/adapters/oidc/jetty/jetty9.2/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java index 6986b82dc7b..33884830d54 100755 --- a/adapters/oidc/jetty/jetty9.2/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java +++ b/adapters/oidc/jetty/jetty9.2/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java @@ -47,7 +47,7 @@ public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticat } @Override - protected Authentication createAuthentication(UserIdentity userIdentity) { + protected Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/oidc/jetty/jetty9.3/pom.xml b/adapters/oidc/jetty/jetty9.3/pom.xml new file mode 100644 index 00000000000..ee769ba1c6f --- /dev/null +++ b/adapters/oidc/jetty/jetty9.3/pom.xml @@ -0,0 +1,156 @@ + + + + + + keycloak-parent + org.keycloak + 2.1.0-SNAPSHOT + ../../../../pom.xml + + 4.0.0 + + keycloak-jetty93-adapter + Keycloak Jetty 9.3.x Integration + + 9.3.9.v20160517 + + org.keycloak.adapters.jetty.* + + + org.eclipse.jetty.*;resolution:=optional, + javax.servlet.*;version="[3.0,4)";resolution:=optional, + org.keycloak.*;version="${project.version}", + *;resolution:=optional + + + + + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + org.keycloak + keycloak-core + + + org.keycloak + keycloak-adapter-core + + + org.keycloak + keycloak-jetty-core + + + org.apache.httpcomponents + httpclient + + + org.bouncycastle + bcprov-jdk15on + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-annotations + + + org.eclipse.jetty + jetty-server + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-util + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-security + ${jetty9.version} + provided + + + + junit + junit + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.felix + maven-bundle-plugin + true + + + bundle-manifest + process-classes + + manifest + + + + + + . + ${project.name} + ${project.groupId}.${project.artifactId} + ${keycloak.osgi.import} + ${keycloak.osgi.export} + + + + + + + diff --git a/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/Jetty93RequestAuthenticator.java b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/Jetty93RequestAuthenticator.java new file mode 100644 index 00000000000..e77667b65c9 --- /dev/null +++ b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/Jetty93RequestAuthenticator.java @@ -0,0 +1,47 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.jetty; + +import org.eclipse.jetty.server.Request; +import org.keycloak.adapters.AdapterTokenStore; +import org.keycloak.adapters.KeycloakDeployment; +import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator; +import org.keycloak.adapters.spi.HttpFacade; + +import javax.servlet.http.HttpSession; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class Jetty93RequestAuthenticator extends JettyRequestAuthenticator { + public Jetty93RequestAuthenticator(HttpFacade facade, KeycloakDeployment deployment, AdapterTokenStore tokenStore, int sslRedirectPort, Request request) { + super(facade, deployment, tokenStore, sslRedirectPort, request); + } + + @Override + protected String changeHttpSessionId(boolean create) { + Request request = this.request; + HttpSession session = request.getSession(false); + if (session == null) { + return request.getSession(true).getId(); + } + if (!deployment.isTurnOffChangeSessionIdOnLogin()) return request.changeSessionId(); + else return session.getId(); + } +} diff --git a/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/JettyAdapterSessionStore.java b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/JettyAdapterSessionStore.java new file mode 100644 index 00000000000..f5f6ef83e93 --- /dev/null +++ b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/JettyAdapterSessionStore.java @@ -0,0 +1,112 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.jetty; + +import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.security.authentication.FormAuthenticator; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.util.MultiMap; +import org.keycloak.adapters.spi.AdapterSessionStore; +import org.keycloak.adapters.jetty.spi.JettyHttpFacade; +import org.keycloak.common.util.MultivaluedHashMap; + +import javax.servlet.http.HttpSession; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class JettyAdapterSessionStore implements AdapterSessionStore { + public static final String CACHED_FORM_PARAMETERS = "__CACHED_FORM_PARAMETERS"; + protected Request myRequest; + + public JettyAdapterSessionStore(Request request) { + this.myRequest = request; // for IDE/compilation purposes + } + + protected MultiMap extractFormParameters(Request base_request) { + MultiMap formParameters = new MultiMap(); + base_request.extractFormParameters(formParameters); + return formParameters; + } + protected void restoreFormParameters(MultiMap j_post, Request base_request) { + base_request.setContentParameters(j_post); + } + + public boolean restoreRequest() { + HttpSession session = myRequest.getSession(false); + if (session == null) return false; + synchronized (session) { + String j_uri = (String) session.getAttribute(FormAuthenticator.__J_URI); + if (j_uri != null) { + // check if the request is for the same url as the original and restore + // params if it was a post + StringBuffer buf = myRequest.getRequestURL(); + if (myRequest.getQueryString() != null) + buf.append("?").append(myRequest.getQueryString()); + if (j_uri.equals(buf.toString())) { + String method = (String)session.getAttribute(JettyHttpFacade.__J_METHOD); + myRequest.setMethod(method); + MultivaluedHashMap j_post = (MultivaluedHashMap) session.getAttribute(CACHED_FORM_PARAMETERS); + if (j_post != null) { + myRequest.setContentType("application/x-www-form-urlencoded"); + MultiMap map = new MultiMap(); + for (String key : j_post.keySet()) { + for (String val : j_post.getList(key)) { + map.add(key, val); + } + } + restoreFormParameters(map, myRequest); + } + session.removeAttribute(FormAuthenticator.__J_URI); + session.removeAttribute(JettyHttpFacade.__J_METHOD); + session.removeAttribute(FormAuthenticator.__J_POST); + } + return true; + } + } + return false; + } + + public void saveRequest() { + // remember the current URI + HttpSession session = myRequest.getSession(); + synchronized (session) { + // But only if it is not set already, or we save every uri that leads to a login form redirect + if (session.getAttribute(FormAuthenticator.__J_URI) == null) { + StringBuffer buf = myRequest.getRequestURL(); + if (myRequest.getQueryString() != null) + buf.append("?").append(myRequest.getQueryString()); + session.setAttribute(FormAuthenticator.__J_URI, buf.toString()); + session.setAttribute(JettyHttpFacade.__J_METHOD, myRequest.getMethod()); + + if ("application/x-www-form-urlencoded".equals(myRequest.getContentType()) && "POST".equalsIgnoreCase(myRequest.getMethod())) { + MultiMap formParameters = extractFormParameters(myRequest); + MultivaluedHashMap map = new MultivaluedHashMap(); + for (String key : formParameters.keySet()) { + for (Object value : formParameters.getValues(key)) { + map.add(key, (String) value); + } + } + session.setAttribute(CACHED_FORM_PARAMETERS, map); + } + } + } + } + +} diff --git a/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java new file mode 100644 index 00000000000..fe9c098d38a --- /dev/null +++ b/adapters/oidc/jetty/jetty9.3/src/main/java/org/keycloak/adapters/jetty/KeycloakJettyAuthenticator.java @@ -0,0 +1,69 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.jetty; + +import org.eclipse.jetty.server.Authentication; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.UserIdentity; +import org.keycloak.adapters.AdapterTokenStore; +import org.keycloak.adapters.KeycloakDeployment; +import org.keycloak.adapters.jetty.core.AbstractKeycloakJettyAuthenticator; +import org.keycloak.adapters.jetty.core.JettyRequestAuthenticator; +import org.keycloak.adapters.jetty.core.JettySessionTokenStore; +import org.keycloak.adapters.jetty.spi.JettyHttpFacade; + +import javax.servlet.ServletRequest; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class KeycloakJettyAuthenticator extends AbstractKeycloakJettyAuthenticator { + + public KeycloakJettyAuthenticator() { + super(); + } + + + @Override + protected Request resolveRequest(ServletRequest req) { + return Request.getBaseRequest(req); + } + + @Override + protected Authentication createAuthentication(UserIdentity userIdentity, final Request request) { + return new KeycloakAuthentication(getAuthMethod(), userIdentity) { + @Override + public void logout() { + logoutCurrent(request); + } + }; + } + + @Override + public AdapterTokenStore createSessionTokenStore(Request request, KeycloakDeployment resolvedDeployment) { + return new JettySessionTokenStore(request, resolvedDeployment, new JettyAdapterSessionStore(request)); + } + + @Override + protected JettyRequestAuthenticator createRequestAuthenticator(Request request, JettyHttpFacade facade, + KeycloakDeployment deployment, AdapterTokenStore tokenStore) { + return new Jetty93RequestAuthenticator(facade, deployment, tokenStore, -1, request); + } + +} diff --git a/adapters/oidc/jetty/pom.xml b/adapters/oidc/jetty/pom.xml index 40f0e41b5ae..7c1d9b0bbb9 100755 --- a/adapters/oidc/jetty/pom.xml +++ b/adapters/oidc/jetty/pom.xml @@ -33,7 +33,8 @@ jetty-core jetty8.1 - jetty9.2 jetty9.1 + jetty9.2 + jetty9.3 diff --git a/adapters/saml/jetty/jetty-core/src/main/java/org/keycloak/adapters/saml/jetty/AbstractSamlAuthenticator.java b/adapters/saml/jetty/jetty-core/src/main/java/org/keycloak/adapters/saml/jetty/AbstractSamlAuthenticator.java index bfa7d59fbe2..4ef67f81e68 100755 --- a/adapters/saml/jetty/jetty-core/src/main/java/org/keycloak/adapters/saml/jetty/AbstractSamlAuthenticator.java +++ b/adapters/saml/jetty/jetty-core/src/main/java/org/keycloak/adapters/saml/jetty/AbstractSamlAuthenticator.java @@ -370,13 +370,13 @@ public abstract class AbstractSamlAuthenticator extends LoginAuthenticator { Authentication authentication = request.getAuthentication(); if (!(authentication instanceof KeycloakAuthentication)) { UserIdentity userIdentity = createIdentity(samlSession); - authentication = createAuthentication(userIdentity); + authentication = createAuthentication(userIdentity, request); request.setAuthentication(authentication); } return authentication; } - public abstract Authentication createAuthentication(UserIdentity userIdentity); + public abstract Authentication createAuthentication(UserIdentity userIdentity, Request request); public static abstract class KeycloakAuthentication extends UserAuthentication { public KeycloakAuthentication(String method, UserIdentity userIdentity) { diff --git a/adapters/saml/jetty/jetty8.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java b/adapters/saml/jetty/jetty8.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java index e23605608d3..870f986fd10 100755 --- a/adapters/saml/jetty/jetty8.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java +++ b/adapters/saml/jetty/jetty8.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java @@ -17,6 +17,7 @@ package org.keycloak.adapters.saml.jetty; +import org.bouncycastle.cert.ocsp.Req; import org.eclipse.jetty.server.AbstractHttpConnection; import org.eclipse.jetty.server.Authentication; import org.eclipse.jetty.server.Request; @@ -48,7 +49,7 @@ public class KeycloakSamlAuthenticator extends AbstractSamlAuthenticator { } @Override - public Authentication createAuthentication(UserIdentity userIdentity) { + public Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/saml/jetty/jetty9.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java b/adapters/saml/jetty/jetty9.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java index ca89f506bd6..8696801f9b6 100755 --- a/adapters/saml/jetty/jetty9.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java +++ b/adapters/saml/jetty/jetty9.1/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java @@ -17,6 +17,7 @@ package org.keycloak.adapters.saml.jetty; +import org.bouncycastle.cert.ocsp.Req; import org.eclipse.jetty.server.Authentication; import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.Request; @@ -50,7 +51,7 @@ public class KeycloakSamlAuthenticator extends AbstractSamlAuthenticator { } @Override - public Authentication createAuthentication(UserIdentity userIdentity) { + public Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/saml/jetty/jetty9.2/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java b/adapters/saml/jetty/jetty9.2/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java index 32850599a78..3491ab29aa1 100755 --- a/adapters/saml/jetty/jetty9.2/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java +++ b/adapters/saml/jetty/jetty9.2/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java @@ -45,7 +45,7 @@ public class KeycloakSamlAuthenticator extends AbstractSamlAuthenticator { } @Override - public Authentication createAuthentication(UserIdentity userIdentity) { + public Authentication createAuthentication(UserIdentity userIdentity, Request request) { return new KeycloakAuthentication(getAuthMethod(), userIdentity) { @Override public void logout() { diff --git a/adapters/saml/jetty/jetty9.3/pom.xml b/adapters/saml/jetty/jetty9.3/pom.xml new file mode 100644 index 00000000000..9f53269487e --- /dev/null +++ b/adapters/saml/jetty/jetty9.3/pom.xml @@ -0,0 +1,162 @@ + + + + + + keycloak-parent + org.keycloak + 2.1.0-SNAPSHOT + ../../../../pom.xml + + 4.0.0 + + keycloak-saml-jetty93-adapter + Keycloak Jetty 9.3.x SAML Integration + + 9.3.9.v20160517 + + org.keycloak.adapters.jetty.* + + + org.eclipse.jetty.*;resolution:=optional, + javax.servlet.*;version="[3.0,4)";resolution:=optional, + org.keycloak.*;version="${project.version}", + *;resolution:=optional + + + + + + + org.jboss.logging + jboss-logging + ${jboss.logging.version} + + + org.keycloak + keycloak-common + + + org.bouncycastle + bcprov-jdk15on + + + org.keycloak + keycloak-saml-adapter-api-public + + + org.keycloak + keycloak-saml-adapter-core + + + org.keycloak + keycloak-adapter-spi + + + org.keycloak + keycloak-saml-jetty-adapter-core + + + org.eclipse.jetty + jetty-server + + + org.eclipse.jetty + jetty-util + + + org.eclipse.jetty + jetty-security + + + + + org.eclipse.jetty + jetty-server + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-util + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-security + ${jetty9.version} + provided + + + + junit + junit + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.felix + maven-bundle-plugin + true + + + bundle-manifest + process-classes + + manifest + + + + + + . + ${project.name} + ${project.groupId}.${project.artifactId} + ${keycloak.osgi.import} + ${keycloak.osgi.export} + + + + + + + diff --git a/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/Jetty9SamlSessionStore.java b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/Jetty9SamlSessionStore.java new file mode 100644 index 00000000000..fa618cb5737 --- /dev/null +++ b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/Jetty9SamlSessionStore.java @@ -0,0 +1,44 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.saml.jetty; + +import org.eclipse.jetty.server.Request; +import org.keycloak.adapters.jetty.spi.JettyUserSessionManagement; +import org.keycloak.adapters.saml.SamlDeployment; +import org.keycloak.adapters.spi.AdapterSessionStore; +import org.keycloak.adapters.spi.HttpFacade; +import org.keycloak.adapters.spi.SessionIdMapper; + +import javax.servlet.http.HttpSession; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class Jetty9SamlSessionStore extends JettySamlSessionStore { + public Jetty9SamlSessionStore(Request request, AdapterSessionStore sessionStore, HttpFacade facade, SessionIdMapper idMapper, JettyUserSessionManagement sessionManagement, SamlDeployment deployment) { + super(request, sessionStore, facade, idMapper, sessionManagement, deployment); + } + + @Override + protected String changeSessionId(HttpSession session) { + Request request = this.request; + if (!deployment.turnOffChangeSessionIdOnLogin()) return request.changeSessionId(); + else return session.getId(); + } +} diff --git a/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/JettyAdapterSessionStore.java b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/JettyAdapterSessionStore.java new file mode 100644 index 00000000000..22590865dc2 --- /dev/null +++ b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/JettyAdapterSessionStore.java @@ -0,0 +1,112 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.saml.jetty; + +import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.security.authentication.FormAuthenticator; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.util.MultiMap; +import org.keycloak.adapters.spi.AdapterSessionStore; +import org.keycloak.adapters.jetty.spi.JettyHttpFacade; +import org.keycloak.common.util.MultivaluedHashMap; + +import javax.servlet.http.HttpSession; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class JettyAdapterSessionStore implements AdapterSessionStore { + public static final String CACHED_FORM_PARAMETERS = "__CACHED_FORM_PARAMETERS"; + protected Request myRequest; + + public JettyAdapterSessionStore(Request request) { + this.myRequest = request; // for IDE/compilation purposes + } + + protected MultiMap extractFormParameters(Request base_request) { + MultiMap formParameters = new MultiMap(); + base_request.extractFormParameters(formParameters); + return formParameters; + } + protected void restoreFormParameters(MultiMap j_post, Request base_request) { + base_request.setContentParameters(j_post); + } + + public boolean restoreRequest() { + HttpSession session = myRequest.getSession(false); + if (session == null) return false; + synchronized (session) { + String j_uri = (String) session.getAttribute(FormAuthenticator.__J_URI); + if (j_uri != null) { + // check if the request is for the same url as the original and restore + // params if it was a post + StringBuffer buf = myRequest.getRequestURL(); + if (myRequest.getQueryString() != null) + buf.append("?").append(myRequest.getQueryString()); + if (j_uri.equals(buf.toString())) { + String method = (String)session.getAttribute(JettyHttpFacade.__J_METHOD); + myRequest.setMethod(method); + MultivaluedHashMap j_post = (MultivaluedHashMap) session.getAttribute(CACHED_FORM_PARAMETERS); + if (j_post != null) { + myRequest.setContentType("application/x-www-form-urlencoded"); + MultiMap map = new MultiMap(); + for (String key : j_post.keySet()) { + for (String val : j_post.getList(key)) { + map.add(key, val); + } + } + restoreFormParameters(map, myRequest); + } + session.removeAttribute(FormAuthenticator.__J_URI); + session.removeAttribute(JettyHttpFacade.__J_METHOD); + session.removeAttribute(FormAuthenticator.__J_POST); + } + return true; + } + } + return false; + } + + public void saveRequest() { + // remember the current URI + HttpSession session = myRequest.getSession(); + synchronized (session) { + // But only if it is not set already, or we save every uri that leads to a login form redirect + if (session.getAttribute(FormAuthenticator.__J_URI) == null) { + StringBuffer buf = myRequest.getRequestURL(); + if (myRequest.getQueryString() != null) + buf.append("?").append(myRequest.getQueryString()); + session.setAttribute(FormAuthenticator.__J_URI, buf.toString()); + session.setAttribute(JettyHttpFacade.__J_METHOD, myRequest.getMethod()); + + if ("application/x-www-form-urlencoded".equals(myRequest.getContentType()) && "POST".equalsIgnoreCase(myRequest.getMethod())) { + MultiMap formParameters = extractFormParameters(myRequest); + MultivaluedHashMap map = new MultivaluedHashMap(); + for (String key : formParameters.keySet()) { + for (Object value : formParameters.getValues(key)) { + map.add(key, (String) value); + } + } + session.setAttribute(CACHED_FORM_PARAMETERS, map); + } + } + } + } + +} diff --git a/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java new file mode 100644 index 00000000000..0d4268fc991 --- /dev/null +++ b/adapters/saml/jetty/jetty9.3/src/main/java/org/keycloak/adapters/saml/jetty/KeycloakSamlAuthenticator.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.adapters.saml.jetty; + +import org.eclipse.jetty.server.Authentication; +import org.eclipse.jetty.server.HttpChannel; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.UserIdentity; +import org.keycloak.adapters.jetty.spi.JettyUserSessionManagement; +import org.keycloak.adapters.spi.AdapterSessionStore; +import org.keycloak.adapters.saml.SamlDeployment; +import org.keycloak.adapters.spi.HttpFacade; + +import javax.servlet.ServletRequest; + +/** + * @author Bill Burke + * @version $Revision: 1 $ + */ +public class KeycloakSamlAuthenticator extends AbstractSamlAuthenticator { + + public KeycloakSamlAuthenticator() { + super(); + } + + + @Override + protected Request resolveRequest(ServletRequest req) { + return Request.getBaseRequest(req); + } + + @Override + public Authentication createAuthentication(UserIdentity userIdentity, final Request request) { + return new KeycloakAuthentication(getAuthMethod(), userIdentity) { + @Override + public void logout() { + logoutCurrent(request); + } + }; + } + + @Override + public AdapterSessionStore createSessionTokenStore(Request request, SamlDeployment resolvedDeployment) { + return new JettyAdapterSessionStore(request); + } + + @Override + protected JettySamlSessionStore createJettySamlSessionStore(Request request, HttpFacade facade, SamlDeployment resolvedDeployment) { + JettySamlSessionStore store; + store = new Jetty9SamlSessionStore(request, createSessionTokenStore(request, resolvedDeployment), facade, idMapper, new JettyUserSessionManagement(request.getSessionManager()), resolvedDeployment); + return store; + } +} diff --git a/adapters/saml/jetty/pom.xml b/adapters/saml/jetty/pom.xml index 82796c0eeeb..ef729ca1f9c 100755 --- a/adapters/saml/jetty/pom.xml +++ b/adapters/saml/jetty/pom.xml @@ -35,5 +35,6 @@ jetty8.1 jetty9.1 jetty9.2 + jetty9.3 diff --git a/distribution/adapters/jetty93-adapter-zip/assembly.xml b/distribution/adapters/jetty93-adapter-zip/assembly.xml new file mode 100644 index 00000000000..172882a7f11 --- /dev/null +++ b/distribution/adapters/jetty93-adapter-zip/assembly.xml @@ -0,0 +1,56 @@ + + + + war-dist + + + zip + tar.gz + + false + + + + + + keycloak.mod + + modules + + + ${project.build.directory}/modules + + + + + + false + true + true + + org.keycloak:keycloak-jetty93-adapter + + + org.eclipse.jetty:jetty-server + org.eclipse.jetty:jetty-util + org.eclipse.jetty:jetty-security + + lib/keycloak + + + diff --git a/distribution/adapters/jetty93-adapter-zip/keycloak.mod b/distribution/adapters/jetty93-adapter-zip/keycloak.mod new file mode 100644 index 00000000000..4da630848fd --- /dev/null +++ b/distribution/adapters/jetty93-adapter-zip/keycloak.mod @@ -0,0 +1,28 @@ +# +# Keycloak Jetty Adapter +# + +[depend] +server +security + +[lib] + + +lib/keycloak/*.jar + diff --git a/distribution/adapters/jetty93-adapter-zip/pom.xml b/distribution/adapters/jetty93-adapter-zip/pom.xml new file mode 100644 index 00000000000..84d905681da --- /dev/null +++ b/distribution/adapters/jetty93-adapter-zip/pom.xml @@ -0,0 +1,68 @@ + + + + 4.0.0 + + keycloak-parent + org.keycloak + 2.1.0-SNAPSHOT + ../../../pom.xml + + + keycloak-jetty93-adapter-dist + pom + Keycloak Jetty 9.3.x Adapter Distro + + + + + org.keycloak + keycloak-jetty93-adapter + + + + + + maven-assembly-plugin + + + assemble + package + + single + + + + assembly.xml + + + target + + + target/assembly/work + + false + + + + + + + + diff --git a/distribution/adapters/pom.xml b/distribution/adapters/pom.xml index 31db4935bae..5dcd20d6470 100755 --- a/distribution/adapters/pom.xml +++ b/distribution/adapters/pom.xml @@ -35,6 +35,7 @@ jetty81-adapter-zip jetty91-adapter-zip jetty92-adapter-zip + jetty93-adapter-zip js-adapter-zip osgi tomcat6-adapter-zip diff --git a/distribution/downloads/pom.xml b/distribution/downloads/pom.xml index f581e641b2e..7a2994e521e 100755 --- a/distribution/downloads/pom.xml +++ b/distribution/downloads/pom.xml @@ -186,6 +186,17 @@ tar.gz + + org.keycloak + keycloak-jetty93-adapter-dist + zip + + + org.keycloak + keycloak-jetty93-adapter-dist + tar.gz + + org.keycloak keycloak-js-adapter-dist @@ -307,6 +318,17 @@ tar.gz + + org.keycloak + keycloak-saml-jetty93-adapter-dist + zip + + + org.keycloak + keycloak-saml-jetty93-adapter-dist + tar.gz + + org.keycloak keycloak-saml-tomcat6-adapter-dist diff --git a/distribution/saml-adapters/jetty93-adapter-zip/assembly.xml b/distribution/saml-adapters/jetty93-adapter-zip/assembly.xml new file mode 100644 index 00000000000..cafc5614817 --- /dev/null +++ b/distribution/saml-adapters/jetty93-adapter-zip/assembly.xml @@ -0,0 +1,56 @@ + + + + war-dist + + + zip + tar.gz + + false + + + + + + keycloak.mod + + modules + + + ${project.build.directory}/modules + + + + + + false + true + true + + org.keycloak:keycloak-saml-jetty93-adapter + + + org.eclipse.jetty:jetty-server + org.eclipse.jetty:jetty-util + org.eclipse.jetty:jetty-security + + lib/keycloak + + + diff --git a/distribution/saml-adapters/jetty93-adapter-zip/keycloak.mod b/distribution/saml-adapters/jetty93-adapter-zip/keycloak.mod new file mode 100644 index 00000000000..4da630848fd --- /dev/null +++ b/distribution/saml-adapters/jetty93-adapter-zip/keycloak.mod @@ -0,0 +1,28 @@ +# +# Keycloak Jetty Adapter +# + +[depend] +server +security + +[lib] + + +lib/keycloak/*.jar + diff --git a/distribution/saml-adapters/jetty93-adapter-zip/pom.xml b/distribution/saml-adapters/jetty93-adapter-zip/pom.xml new file mode 100644 index 00000000000..7906ac8eca5 --- /dev/null +++ b/distribution/saml-adapters/jetty93-adapter-zip/pom.xml @@ -0,0 +1,68 @@ + + + + 4.0.0 + + keycloak-parent + org.keycloak + 2.1.0-SNAPSHOT + ../../../pom.xml + + + keycloak-saml-jetty93-adapter-dist + pom + Keycloak SAML Jetty 9.3.x Adapter Distro + + + + + org.keycloak + keycloak-saml-jetty93-adapter + + + + + + maven-assembly-plugin + + + assemble + package + + single + + + + assembly.xml + + + target + + + target/assembly/work + + false + + + + + + + + diff --git a/distribution/saml-adapters/pom.xml b/distribution/saml-adapters/pom.xml index 2fb00708d20..6532a014700 100755 --- a/distribution/saml-adapters/pom.xml +++ b/distribution/saml-adapters/pom.xml @@ -39,6 +39,7 @@ jetty92-adapter-zip + jetty93-adapter-zip as7-eap6-adapter diff --git a/pom.xml b/pom.xml index 3959b46e77e..904a921316e 100755 --- a/pom.xml +++ b/pom.xml @@ -771,6 +771,11 @@ keycloak-jetty92-adapter ${project.version} + + org.keycloak + keycloak-jetty93-adapter + ${project.version} + org.keycloak keycloak-as7-subsystem @@ -986,6 +991,11 @@ keycloak-saml-jetty92-adapter ${project.version} + + org.keycloak + keycloak-saml-jetty93-adapter + ${project.version} + org.keycloak keycloak-saml-undertow-adapter diff --git a/testsuite/jetty/jetty93/pom.xml b/testsuite/jetty/jetty93/pom.xml new file mode 100644 index 00000000000..811d0fd03cc --- /dev/null +++ b/testsuite/jetty/jetty93/pom.xml @@ -0,0 +1,506 @@ + + + + + + keycloak-testsuite-pom + org.keycloak + 2.1.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + keycloak-testsuite-jetty93 + Keycloak Jetty 9.3.x Integration TestSuite + + 9.3.9.v20160517 + + + + + + org.keycloak + keycloak-dependencies-server-all + pom + + + org.keycloak + keycloak-admin-client + + + org.keycloak + keycloak-saml-jetty93-adapter + + + log4j + log4j + + + org.slf4j + slf4j-api + 1.6.1 + + + org.slf4j + slf4j-log4j12 + 1.6.1 + + + org.jboss.spec.javax.servlet + jboss-servlet-api_3.0_spec + + + org.jboss.spec.javax.ws.rs + jboss-jaxrs-api_2.0_spec + + + org.jboss.resteasy + resteasy-jaxrs + + + log4j + log4j + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-simple + + + + + org.jboss.resteasy + resteasy-client + + + org.jboss.resteasy + resteasy-multipart-provider + + + org.jboss.resteasy + resteasy-jackson2-provider + + + org.jboss.resteasy + resteasy-undertow + + + com.google.zxing + javase + + + org.bouncycastle + bcprov-jdk15on + + + org.apache.httpcomponents + httpclient + + + org.keycloak + keycloak-ldap-federation + + + org.keycloak + keycloak-kerberos-federation + + + org.keycloak + keycloak-undertow-adapter + + + org.keycloak + keycloak-jetty93-adapter + + + org.jboss.logging + jboss-logging + + + io.undertow + undertow-servlet + + + io.undertow + undertow-core + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-annotations + + + junit + junit + + + org.hamcrest + hamcrest-all + + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + + + com.h2database + h2 + + + org.hibernate + hibernate-entitymanager + + + com.icegreen + greenmail + + + org.slf4j + slf4j-api + + + + + org.infinispan + infinispan-core + + + org.seleniumhq.selenium + selenium-java + + + xml-apis + xml-apis + + + org.seleniumhq.selenium + selenium-chrome-driver + + + org.wildfly + wildfly-undertow + ${wildfly.version} + test + + + org.keycloak + keycloak-testsuite-integration + test + + + org.keycloak + keycloak-testsuite-integration + test-jar + test + + + org.eclipse.jetty + jetty-jaas + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-util + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-webapp + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-security + ${jetty9.version} + provided + + + + org.eclipse.jetty + jetty-servlet + ${jetty9.version} + provided + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.2 + + + + test-jar + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + + + + org.codehaus.mojo + exec-maven-plugin + + ${project.basedir} + + + + + + + + keycloak-server + + + + org.codehaus.mojo + exec-maven-plugin + + org.keycloak.testsuite.KeycloakServer + + + + + + + mail-server + + + + org.codehaus.mojo + exec-maven-plugin + + org.keycloak.testsuite.MailServer + + + + + + + totp + + + + org.codehaus.mojo + exec-maven-plugin + + org.keycloak.testsuite.TotpGenerator + + + + + + + + jpa + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + jpa + jpa + jpa + + + + + + + + + mongo + + + localhost + 27018 + keycloak + true + 127.0.0.1 + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + test + integration-test + + test + + + + mongo + mongo + mongo + ${keycloak.connectionsMongo.host} + ${keycloak.connectionsMongo.port} + ${keycloak.connectionsMongo.db} + ${keycloak.connectionsMongo.clearOnStartup} + ${keycloak.connectionsMongo.bindIp} + + + + + default-test + + true + + + + + + + + com.github.joelittlejohn.embedmongo + embedmongo-maven-plugin + + + start-mongodb + pre-integration-test + + start + + + ${keycloak.connectionsMongo.port} + file + ${project.build.directory}/mongodb.log + ${keycloak.connectionsMongo.bindIp} + + + + stop-mongodb + post-integration-test + + stop + + + + + + + + + + + + + + keycloak.connectionsJpa.driver + com.mysql.jdbc.Driver + + + mysql + + + mysql + mysql-connector-java + ${mysql.version} + + + + + + + + + keycloak.connectionsJpa.driver + org.postgresql.Driver + + + postgresql + + + org.postgresql + postgresql + ${postgresql.version} + + + + + + clean-jpa + + + + org.liquibase + liquibase-maven-plugin + + META-INF/jpa-changelog-master.xml + + ${keycloak.connectionsJpa.url} + ${keycloak.connectionsJpa.driver} + ${keycloak.connectionsJpa.user} + ${keycloak.connectionsJpa.password} + + false + + + + clean-jpa + clean + + dropAll + + + + + + + + + diff --git a/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/Jetty9Test.java b/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/Jetty9Test.java new file mode 100644 index 00000000000..00603de4e54 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/Jetty9Test.java @@ -0,0 +1,191 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.keycloak.testsuite; + +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.webapp.WebAppContext; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.RealmModel; +import org.keycloak.services.managers.RealmManager; +import org.keycloak.testsuite.adapter.AdapterTestStrategy; +import org.keycloak.testsuite.rule.AbstractKeycloakRule; + +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Stian Thorgersen + */ +public class Jetty9Test { + @ClassRule + public static AbstractKeycloakRule keycloakRule = new AbstractKeycloakRule() { + @Override + protected void configure(KeycloakSession session, RealmManager manager, RealmModel adminRealm) { + AdapterTestStrategy.baseAdapterTestInitialization(session, manager, adminRealm, getClass()); + } + }; + + public static Server server = null; + + + @BeforeClass + public static void initJetty() throws Exception { + server = new Server(8082); + List list = new ArrayList(); + System.setProperty("app.server.base.url", "http://localhost:8082"); + System.setProperty("my.host.name", "localhost"); + URL dir = Jetty9Test.class.getResource("/adapter-test/demorealm.json"); + File base = new File(dir.getFile()).getParentFile(); + list.add(new WebAppContext(new File(base, "customer-portal").toString(), "/customer-portal")); + list.add(new WebAppContext(new File(base, "customer-db").toString(), "/customer-db")); + list.add(new WebAppContext(new File(base, "customer-db-error-page").toString(), "/customer-db-error-page")); + list.add(new WebAppContext(new File(base, "product-portal").toString(), "/product-portal")); + list.add(new WebAppContext(new File(base, "session-portal").toString(), "/session-portal")); + list.add(new WebAppContext(new File(base, "input-portal").toString(), "/input-portal")); + list.add(new WebAppContext(new File(base, "secure-portal").toString(), "/secure-portal")); + + + + HandlerCollection handlers = new HandlerCollection(); + handlers.setHandlers(list.toArray(new Handler[list.size()])); + server.setHandler(handlers); + + server.start(); + } + + + + @AfterClass + public static void shutdownJetty() throws Exception { + try { + server.stop(); + server.destroy(); + Thread.sleep(100); + } catch (Exception e) {} + } + + @Rule + public AdapterTestStrategy testStrategy = new AdapterTestStrategy("http://localhost:8081/auth", "http://localhost:8082", keycloakRule, true); + + @Test + public void testLoginSSOAndLogout() throws Exception { + testStrategy.testLoginSSOAndLogout(); + } + + @Test + public void testSavedPostRequest() throws Exception { + testStrategy.testSavedPostRequest(); + } + + @Test + public void testServletRequestLogout() throws Exception { + testStrategy.testServletRequestLogout(); + } + + @Test + public void testLoginSSOIdle() throws Exception { + testStrategy.testLoginSSOIdle(); + + } + + @Test + public void testLoginSSOIdleRemoveExpiredUserSessions() throws Exception { + testStrategy.testLoginSSOIdleRemoveExpiredUserSessions(); + } + + @Test + public void testLoginSSOMax() throws Exception { + testStrategy.testLoginSSOMax(); + } + + /** + * KEYCLOAK-518 + * @throws Exception + */ + @Test + public void testNullBearerToken() throws Exception { + testStrategy.testNullBearerToken(); + } + + /** + * KEYCLOAK-1368 + * @throws Exception + */ + @Test + public void testNullBearerTokenCustomErrorPage() throws Exception { + testStrategy.testNullBearerTokenCustomErrorPage(); + } + + /** + * KEYCLOAK-518 + * @throws Exception + */ + @Test + public void testBadUser() throws Exception { + testStrategy.testBadUser(); + } + + @Test + public void testVersion() throws Exception { + testStrategy.testVersion(); + } + + + /** + * KEYCLOAK-732 + * + * @throws Throwable + */ + @Test + public void testSingleSessionInvalidated() throws Throwable { + testStrategy.testSingleSessionInvalidated(); + } + + /** + * KEYCLOAK-741 + */ + @Test + public void testSessionInvalidatedAfterFailedRefresh() throws Throwable { + testStrategy.testSessionInvalidatedAfterFailedRefresh(); + + } + + /** + * KEYCLOAK-942 + */ + @Test + public void testAdminApplicationLogout() throws Throwable { + testStrategy.testAdminApplicationLogout(); + } + + /** + * KEYCLOAK-1216 + */ + @Test + public void testAccountManagementSessionsLogout() throws Throwable { + testStrategy.testAccountManagementSessionsLogout(); + } +} diff --git a/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/JettySamlTest.java b/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/JettySamlTest.java new file mode 100644 index 00000000000..7f1ec9865ff --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/java/org/keycloak/testsuite/JettySamlTest.java @@ -0,0 +1,200 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.keycloak.testsuite; + +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; +import org.eclipse.jetty.webapp.WebAppContext; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.RealmModel; +import org.keycloak.services.managers.RealmManager; +import org.keycloak.testsuite.keycloaksaml.SamlAdapterTestStrategy; +import org.keycloak.testsuite.rule.AbstractKeycloakRule; +import org.openqa.selenium.WebDriver; + +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Stian Thorgersen + */ +public class JettySamlTest { + @Rule + public SamlAdapterTestStrategy testStrategy = new SamlAdapterTestStrategy("http://localhost:8081/auth", "http://localhost:8082", keycloakRule); + @ClassRule + public static AbstractKeycloakRule keycloakRule = new AbstractKeycloakRule() { + @Override + protected void configure(KeycloakSession session, RealmManager manager, RealmModel adminRealm) { + SamlAdapterTestStrategy.baseAdapterTestInitialization(session, manager, adminRealm, getClass()); + } + }; + + public static Server server = null; + + + @BeforeClass + public static void initJetty() throws Exception { + server = new Server(8082); + List list = new ArrayList(); + System.setProperty("app.server.base.url", "http://localhost:8082"); + System.setProperty("my.host.name", "localhost"); + URL dir = JettySamlTest.class.getResource("/keycloak-saml/testsaml.json"); + File base = new File(dir.getFile()).getParentFile(); + //list.add(new WebAppContext(new File(base, "customer-portal").toString(), "/customer-portal")); + list.add(new WebAppContext(new File(base, "simple-post").toString(), "/sales-post")); + list.add(new WebAppContext(new File(base, "simple-post2").toString(), "/sales-post2")); + list.add(new WebAppContext(new File(base, "simple-input").toString(), "/input-portal")); + list.add(new WebAppContext(new File(base, "signed-post").toString(), "/sales-post-sig")); + list.add(new WebAppContext(new File(base, "signed-post-email").toString(), "/sales-post-sig-email")); + list.add(new WebAppContext(new File(base, "signed-post-transient").toString(), "/sales-post-sig-transient")); + list.add(new WebAppContext(new File(base, "signed-post-persistent").toString(), "/sales-post-sig-persistent")); + list.add(new WebAppContext(new File(base, "signed-metadata").toString(), "/sales-metadata")); + list.add(new WebAppContext(new File(base, "signed-get").toString(), "/employee-sig")); + list.add(new WebAppContext(new File(base, "mappers").toString(), "/employee2")); + list.add(new WebAppContext(new File(base, "signed-front-get").toString(), "/employee-sig-front")); + list.add(new WebAppContext(new File(base, "bad-client-signed-post").toString(), "/bad-client-sales-post-sig")); + list.add(new WebAppContext(new File(base, "bad-realm-signed-post").toString(), "/bad-realm-sales-post-sig")); + list.add(new WebAppContext(new File(base, "encrypted-post").toString(), "/sales-post-enc")); + SamlAdapterTestStrategy.uploadSP("http://localhost:8081/auth"); + + + + HandlerCollection handlers = new HandlerCollection(); + handlers.setHandlers(list.toArray(new Handler[list.size()])); + server.setHandler(handlers); + + server.start(); + } + + + + @AfterClass + public static void shutdownJetty() throws Exception { + try { + server.stop(); + server.destroy(); + Thread.sleep(100); + } catch (Exception e) {} + } + + @Test + public void testSavedPostRequest() throws Exception { + testStrategy.testSavedPostRequest(); + } + @Test + public void testPostSimpleLoginLogoutIdpInitiatedRedirectTo() { + testStrategy.testPostSimpleLoginLogoutIdpInitiatedRedirectTo(); + } + + + @Test + public void testErrorHandling() throws Exception { + testStrategy.testErrorHandling(); + } + + @Test + public void testPostSimpleLoginLogout() { + testStrategy.testPostSimpleLoginLogout(); + } + + @Test + public void testPostSimpleLoginLogoutIdpInitiated() { + testStrategy.testPostSimpleLoginLogoutIdpInitiated(); + } + + @Test + public void testPostSignedLoginLogout() { + testStrategy.testPostSignedLoginLogout(); + } + + @Test + public void testPostSignedLoginLogoutTransientNameID() { + testStrategy.testPostSignedLoginLogoutTransientNameID(); + } + + @Test + public void testPostSignedLoginLogoutPersistentNameID() { + testStrategy.testPostSignedLoginLogoutPersistentNameID(); + } + + @Test + public void testPostSignedLoginLogoutEmailNameID() { + testStrategy.testPostSignedLoginLogoutEmailNameID(); + } + + @Test + public void testAttributes() throws Exception { + testStrategy.testAttributes(); + } + + @Test + public void testRedirectSignedLoginLogout() { + testStrategy.testRedirectSignedLoginLogout(); + } + + @Test + public void testRedirectSignedLoginLogoutFrontNoSSO() { + testStrategy.testRedirectSignedLoginLogoutFrontNoSSO(); + } + + @Test + public void testRedirectSignedLoginLogoutFront() { + testStrategy.testRedirectSignedLoginLogoutFront(); + } + + @Test + public void testPostEncryptedLoginLogout() { + testStrategy.testPostEncryptedLoginLogout(); + } + + @Test + public void testPostBadClientSignature() { + testStrategy.testPostBadClientSignature(); + } + + @Test + public void testPostBadRealmSignature() { + testStrategy.testPostBadRealmSignature( ); + } + + @Test + public void testPostSimpleUnauthorized() { + testStrategy.testPostSimpleUnauthorized( new SamlAdapterTestStrategy.CheckAuthError() { + @Override + public void check(WebDriver driver) { + Assert.assertTrue(driver.getPageSource().contains("Error 403 !role")); + } + }); + } + + @Test + public void testMetadataPostSignedLoginLogout() throws Exception { + testStrategy.testMetadataPostSignedLoginLogout(); + } + + + +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/keycloak.json new file mode 100644 index 00000000000..38d1179399b --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "customer-db", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url": "http://localhost:8081/auth", + "ssl-required" : "external", + "bearer-only" : true, + "enable-cors" : true + +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/web.xml new file mode 100644 index 00000000000..b5e700aada0 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db-error-page/WEB-INF/web.xml @@ -0,0 +1,96 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.CustomerDatabaseServlet + + + Error Servlet + org.keycloak.testsuite.rule.ErrorServlet + + + + Servlet + /* + + + + Error Servlet + /error.html + + + + 400 + /error.html + + + + 401 + /error.html + + + + 403 + /error.html + + + + 500 + /error.html + + + + + Users + /* + + + user + + + + + Errors + /error.html + + + + + FORM + demo + + /error.html + /error.html + + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/keycloak.json new file mode 100644 index 00000000000..38d1179399b --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "customer-db", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url": "http://localhost:8081/auth", + "ssl-required" : "external", + "bearer-only" : true, + "enable-cors" : true + +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/web.xml new file mode 100644 index 00000000000..81924fb852d --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-db/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.CustomerDatabaseServlet + + + + Servlet + /* + + + + + Users + /* + + + user + + + + + BASIC + demo + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/keycloak.json new file mode 100644 index 00000000000..e9ad98722c0 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/keycloak.json @@ -0,0 +1,11 @@ +{ + "realm": "demo", + "resource": "customer-portal", + "realm-public-key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url": "http://localhost:8081/auth", + "ssl-required" : "external", + "expose-token": true, + "credentials": { + "secret": "password" + } +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/web.xml new file mode 100644 index 00000000000..8d05b6693cb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/customer-portal/WEB-INF/web.xml @@ -0,0 +1,76 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.CustomerServlet + + + Error Servlet + org.keycloak.testsuite.rule.ErrorServlet + + + + Servlet + /* + + + + Error Servlet + /error.html + + + + + Users + /* + + + user + + + + + Errors + /error.html + + + + + FORM + demo + + /error.html + /error.html + + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/demorealm.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/demorealm.json new file mode 100644 index 00000000000..b0a8888c0fc --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/demorealm.json @@ -0,0 +1,164 @@ +{ + "id": "demo", + "realm": "demo", + "enabled": true, + "accessTokenLifespan": 3000, + "accessCodeLifespan": 10, + "accessCodeLifespanUserAction": 6000, + "sslRequired": "external", + "registrationAllowed": false, + "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", + "requiredCredentials": [ "password" ], + "users" : [ + { + "username" : "bburke@redhat.com", + "enabled": true, + "email" : "bburke@redhat.com", + "firstName": "Bill", + "lastName": "Burke", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ], + "realmRoles": [ "user" ], + "applicationRoles": { + "account": [ "manage-account" ] + } + }, + { + "username" : "mposolda", + "enabled": true, + "email" : "mposolda@redhat.com", + "firstName": "Marek", + "lastName": "Posolda", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ], + "realmRoles": [ "user" ], + "applicationRoles": { + "account": [ "manage-account" ] + } + } + ], + "roles" : { + "realm" : [ + { + "name": "user", + "description": "User privileges" + }, + { + "name": "admin", + "description": "Administrator privileges" + } + ] + }, + "scopeMappings": [ + { + "client": "third-party", + "roles": ["user"] + }, + { + "client": "customer-portal", + "roles": ["user"] + }, + { + "client": "product-portal", + "roles": ["user"] + } + + ], + "applications": [ + { + "name": "customer-portal", + "enabled": true, + "adminUrl": "http://localhost:8082/customer-portal", + "baseUrl": "http://localhost:8082/customer-portal", + "directAccessGrantsEnabled": true, + "redirectUris": [ + "http://localhost:8082/customer-portal/*" + ], + "secret": "password" + }, + { + "name": "customer-cookie-portal", + "enabled": true, + "baseUrl": "http://localhost:8082/customer-cookie-portal", + "redirectUris": [ + "http://localhost:8082/customer-cookie-portal/*" + ], + "secret": "password" + }, + { + "name": "customer-portal-js", + "enabled": true, + "publicClient": true, + "adminUrl": "http://localhost:8082/customer-portal-js", + "baseUrl": "http://localhost:8082/customer-portal-js", + "redirectUris": [ + "http://localhost:8080/customer-portal-js/*" + ] + }, + { + "name": "customer-portal-cli", + "enabled": true, + "publicClient": true, + "redirectUris": [ + "urn:ietf:wg:oauth:2.0:oob", + "http://localhost" + ] + }, + { + "name": "product-portal", + "enabled": true, + "adminUrl": "http://localhost:8082/product-portal", + "baseUrl": "http://localhost:8082/product-portal", + "redirectUris": [ + "http://localhost:8082/product-portal/*" + ], + "secret": "password" + }, + { + "name": "secure-portal", + "enabled": true, + "adminUrl": "http://localhost:8082/secure-portal", + "baseUrl": "http://localhost:8082/secure-portal", + "redirectUris": [ + "http://localhost:8082/secure-portal/*" + ], + "secret": "password" + }, + { + "name": "session-portal", + "enabled": true, + "adminUrl": "http://localhost:8082/session-portal", + "baseUrl": "http://localhost:8082/session-portal", + "redirectUris": [ + "http://localhost:8082/session-portal/*" + ], + "secret": "password" + }, + { + "name": "input-portal", + "enabled": true, + "adminUrl": "http://localhost:8082/input-portal", + "baseUrl": "http://localhost:8082/input-portal", + "redirectUris": [ + "http://localhost:8082/input-portal/*" + ], + "secret": "password" + } + ], + "oauthClients": [ + { + "name": "third-party", + "enabled": true, + "redirectUris": [ + "http://localhost:8082/oauth-client/*", + "http://localhost:8082/oauth-client-cdi/*" + ], + "secret": "password" + } + ] +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/keycloak.json new file mode 100644 index 00000000000..0b4b1653023 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "input-portal", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://${my.host.name}:8081/auth", + "ssl-required" : "external", + "credentials" : { + "secret": "password" + } +} \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/web.xml new file mode 100644 index 00000000000..4ac67c46e11 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/input-portal/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.InputServlet + + + + Servlet + /* + + + + + Users + /secured/* + + + user + + + + + BASIC + demo + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/keycloak.json new file mode 100644 index 00000000000..3cfd4781575 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "product-portal", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://localhost:8081/auth", + "ssl-required" : "external", + "credentials" : { + "secret": "password" + } +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/web.xml new file mode 100644 index 00000000000..59c6d3f7ae2 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/product-portal/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.ProductServlet + + + + Servlet + /* + + + + + Users + /* + + + user + + + + + BASIC + demo + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/keycloak.json new file mode 100644 index 00000000000..dd38f249c24 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "secure-portal", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://localhost:8080/auth", + "ssl-required" : "external", + "credentials" : { + "secret": "password" + } +} diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/web.xml new file mode 100644 index 00000000000..859407b7542 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/secure-portal/WEB-INF/web.xml @@ -0,0 +1,47 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.CallAuthenticatedServlet + + + + Servlet + /* + + + + BASIC + demo + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..737eeb8bcfb --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/keycloak.json b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/keycloak.json new file mode 100644 index 00000000000..6a7f60b45c4 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/keycloak.json @@ -0,0 +1,10 @@ +{ + "realm" : "demo", + "resource" : "session-portal", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://${my.host.name}:8081/auth", + "ssl-required" : "external", + "credentials" : { + "secret": "password" + } +} \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/web.xml new file mode 100644 index 00000000000..be1549fe74f --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/adapter-test/session-portal/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + adapter-test + + + Servlet + org.keycloak.testsuite.adapter.SessionServlet + + + + Servlet + /* + + + + + Users + /* + + + user + + + + + BASIC + demo + + + + admin + + + user + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..ecc74695524 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keystore.jks new file mode 100644 index 00000000000..6a3e3ba7d3b Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-client-signed-post/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..fee4cfe0e74 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keystore.jks new file mode 100644 index 00000000000..215384cdef8 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/web.xml new file mode 100644 index 00000000000..42a7f774b5d --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/bad-realm-signed-post/WEB-INF/web.xml @@ -0,0 +1,88 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + Error Servlet + org.keycloak.testsuite.rule.ErrorServlet + + + SendUsernameServlet + /* + + + + Error Servlet + /error.html + + + + 400 + /error.html + + + + 401 + /error.html + + + + 403 + /error.html + + + + 500 + /error.html + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..eebd48136d7 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keystore.jks new file mode 100644 index 00000000000..822162ceafc Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/encrypted-post/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..0495c3d242a --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/keycloak-saml.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/web.xml new file mode 100644 index 00000000000..124a5ca25e1 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/mappers/WEB-INF/web.xml @@ -0,0 +1,73 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + el-jefe + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + + user + + + employee + + + pee-on + + + hardcoded-role + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..993277d1c82 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keycloak-saml.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keystore.jks new file mode 100644 index 00000000000..4daad218a3f Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-front-get/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..5e8dca8a783 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keycloak-saml.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keystore.jks new file mode 100644 index 00000000000..4daad218a3f Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/web.xml new file mode 100644 index 00000000000..42a7f774b5d --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-get/WEB-INF/web.xml @@ -0,0 +1,88 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + Error Servlet + org.keycloak.testsuite.rule.ErrorServlet + + + SendUsernameServlet + /* + + + + Error Servlet + /error.html + + + + 400 + /error.html + + + + 401 + /error.html + + + + 403 + /error.html + + + + 500 + /error.html + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..16a4d75c980 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keystore.jks new file mode 100644 index 00000000000..144830bc776 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-metadata/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..ff82567166d --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keycloak-saml.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keystore.jks new file mode 100644 index 00000000000..144830bc776 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-email/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..626d239f3cd --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keystore.jks new file mode 100644 index 00000000000..144830bc776 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-persistent/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..3182dc07fa5 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keystore.jks new file mode 100644 index 00000000000..144830bc776 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post-transient/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..32bb6b0a07c --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keycloak-saml.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keystore.jks b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keystore.jks new file mode 100644 index 00000000000..144830bc776 Binary files /dev/null and b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/keystore.jks differ diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/signed-post/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..1af3a86b755 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/keycloak-saml.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/web.xml new file mode 100644 index 00000000000..0be7a7439e2 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-input/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.InputServlet + + + SendUsernameServlet + /* + + + + + Users + /secured/* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..f4cb21c9d46 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/keycloak-saml.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/jetty-web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/jetty-web.xml new file mode 100644 index 00000000000..c583350b791 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/keycloak-saml.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/keycloak-saml.xml new file mode 100644 index 00000000000..3f447c654e7 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/keycloak-saml.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/web.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/web.xml new file mode 100644 index 00000000000..f1cdbea6a78 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/simple-post2/WEB-INF/web.xml @@ -0,0 +1,60 @@ + + + + + + adapter-test + + + SendUsernameServlet + org.keycloak.testsuite.keycloaksaml.SendUsernameServlet + + + SendUsernameServlet + /* + + + + + Users + /* + + + manager + + + + + BASIC + demo + + /error.html + /error.html + + + + + manager + + + el-jefe + + diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/sp-metadata.xml b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/sp-metadata.xml new file mode 100644 index 00000000000..853a6b2d41e --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/sp-metadata.xml @@ -0,0 +1,55 @@ + + + + + + + urn:oasis:names:tc:SAML:2.0:nameid-format:transient + + + + + + + + MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw== + + + + + + + JBoss + JBoss by Red Hat + http://localhost:8080/sales-metadata/ + + + The + Admin + admin@mycompany.com + + + \ No newline at end of file diff --git a/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/testsaml.json b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/testsaml.json new file mode 100644 index 00000000000..71cde711a74 --- /dev/null +++ b/testsuite/jetty/jetty93/src/test/resources/keycloak-saml/testsaml.json @@ -0,0 +1,452 @@ +{ + "id": "demo", + "realm": "demo", + "enabled": true, + "sslRequired": "external", + "registrationAllowed": true, + "resetPasswordAllowed": true, + "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", + "requiredCredentials": [ "password" ], + "defaultRoles": [ "user" ], + "smtpServer": { + "from": "auto@keycloak.org", + "host": "localhost", + "port":"3025" + }, + "users" : [ + { + "username" : "bburke", + "enabled": true, + "email" : "bburke@redhat.com", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ], + "attributes" : { + "phone": "617" + }, + "realmRoles": ["manager", "user"], + "applicationRoles": { + "http://localhost:8082/employee/": [ "employee" ], + "http://localhost:8082/employee2/": [ "employee" ] + } + } , + { + "username" : "unauthorized", + "enabled": true, + "email" : "unauthorized@redhat.com", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ] + }, + { + "username" : "topGroupUser", + "enabled": true, + "email" : "top@redhat.com", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ], + "groups": [ + "/top" + ] + }, + { + "username" : "level2GroupUser", + "enabled": true, + "email" : "level2@redhat.com", + "credentials" : [ + { "type" : "password", + "value" : "password" } + ], + "groups": [ + "/top/level2" + ] + } + ], + "applications": [ + { + "name": "http://localhost:8082/sales-post/", + "enabled": true, + "fullScopeAllowed": true, + "protocol": "saml", + "baseUrl": "http://localhost:8082/sales-post", + "redirectUris": [ + "http://localhost:8082/sales-post/*" + ], + "attributes": { + "saml.authnstatement": "true", + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post/saml", + "saml_idp_initiated_sso_url_name": "sales-post" + } + }, + { + "name": "http://localhost:8082/sales-post2/", + "enabled": true, + "fullScopeAllowed": true, + "protocol": "saml", + "baseUrl": "http://localhost:8082/sales-post2", + "redirectUris": [ + "http://localhost:8082/sales-post2/*" + ], + "attributes": { + "saml.authnstatement": "true", + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post2/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post2/saml", + "saml_idp_initiated_sso_url_name": "sales-post2", + "saml_idp_initiated_sso_relay_state": "redirectTo=/foo" + } + }, + { + "name": "http://localhost:8082/input-portal/", + "enabled": true, + "fullScopeAllowed": true, + "protocol": "saml", + "baseUrl": "http://localhost:8082/input-portal/", + "redirectUris": [ + "http://localhost:8082/input-portal/*" + ], + "attributes": { + "saml.authnstatement": "true", + "saml_assertion_consumer_url_post": "http://localhost:8082/input-portal/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/input-portal/saml" + } + }, + { + "name": "http://localhost:8082/sales-post-sig/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/sales-post-sig", + "redirectUris": [ + "http://localhost:8082/sales-post-sig/*" + ], + "attributes": { + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post-sig/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post-sig/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post-sig/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post-sig/saml", + "saml.server.signature": "true", + "saml.signature.algorithm": "RSA_SHA256", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw==" + } + }, + { + "name": "http://localhost:8082/sales-post-sig-transient/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/sales-post-sig-transient", + "adminUrl": "http://localhost:8082/sales-post-sig-transient/saml", + "redirectUris": [ + "http://localhost:8082/sales-post-sig-transient/*" + ], + "attributes": { + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post-sig-transient/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post-sig-transient/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post-sig-transient/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post-sig-transient/saml", + "saml.server.signature": "true", + "saml.signature.algorithm": "RSA_SHA256", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw==" + } + }, + { + "name": "http://localhost:8082/sales-post-sig-persistent/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/sales-post-sig-persistent", + "redirectUris": [ + "http://localhost:8082/sales-post-sig-persistent/*" + ], + "attributes": { + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post-sig-persistent/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post-sig-persistent/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post-sig-persistent/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post-sig-persistent/saml", + "saml.server.signature": "true", + "saml.signature.algorithm": "RSA_SHA256", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw==" + } + }, + { + "name": "http://localhost:8082/sales-post-sig-email/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/sales-post-sig-email", + "adminUrl": "http://localhost:8082/sales-post-sig-email/saml", + "redirectUris": [ + "http://localhost:8082/sales-post-sig-email/*" + ], + "attributes": { + "saml_force_name_id_format": "true", + "saml_name_id_format": "email", + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post-sig-email/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post-sig-email/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post-sig-email/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post-sig-email/saml", + "saml.server.signature": "true", + "saml.signature.algorithm": "RSA_SHA256", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw==" + } + }, + { + "name": "http://localhost:8082/bad-realm-sales-post-sig/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/bad-realm-sales-post-sig/", + "adminUrl": "http://localhost:8082/bad-realm-sales-post-sig/saml", + "redirectUris": [ + "http://localhost:8082/bad-realm-sales-post-sig/*" + ], + "attributes": { + "saml.server.signature": "true", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGP5dZDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1zaWcvMB4XDTE0MTAxNjEyNDQyM1oXDTI0MTAxNjEyNDYwM1owMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3Qtc2lnLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1RvGu8RjemSJA23nnMksoHA37MqY1DDTxOECY4rPAd9egr7GUNIXE0y1MokaR5R2crNpN8RIRwR8phQtQDjXL82c6W+NLQISxztarQJ7rdNJIYwHY0d5ri1XRpDP8zAuxubPYiMAVYcDkIcvlbBpwh/dRM5I2eElRK+eSiaMkCUCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCLms6htnPaY69k1ntm9a5jgwSn/K61cdai8R8B0ccY7zvinn9AfRD7fiROQpFyY29wKn8WCLrJ86NBXfgFUGyR5nLNHVy3FghE36N2oHy53uichieMxffE6vhkKJ4P8ChfJMMOZlmCPsQPDvjoAghHt4mriFiQgRdPgIy/zDjSNw==" + } + }, + { + "name": "http://localhost:8082/bad-client-sales-post-sig/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/bad-client-sales-post-sig/", + "adminUrl": "http://localhost:8082/bad-client-sales-post-sig/saml", + "redirectUris": [ + "http://localhost:8082/bad-client-sales-post-sig/*" + ], + "attributes": { + "saml.server.signature": "true", + "saml.client.signature": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGVacCDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1lbmMvMB4XDTE0MTAxNjE0MjA0NloXDTI0MTAxNjE0MjIyNlowMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3QtZW5jLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2+5MCT5BnVN+IYnKZcH6ev1pjXGi4feE0nOycq/VJ3aeaZMi4G9AxOxCBPupErOC7Kgm/Bw5AdJyw+Q12wSRXfJ9FhqCrLXpb7YOhbVSTJ8De5O8mW35DxAlh/cxe9FXjqPb286wKTUZ3LfGYR+X235UQeCTAPS/Ufi21EXaEikCAwEAATANBgkqhkiG9w0BAQsFAAOBgQBMrfGD9QFfx5v7ld/OAto5rjkTe3R1Qei8XRXfcs83vLaqEzjEtTuLGrJEi55kXuJgBpVmQpnwCCkkjSy0JxbqLDdVi9arfWUxEGmOr01ZHycELhDNaQcFqVMPr5kRHIHgktT8hK2IgCvd3Fy9/JCgUgCPxKfhwecyEOKxUc857g==" + } + }, + { + "name": "http://localhost:8082/sales-post-enc/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/sales-post-enc", + "redirectUris": [ + "http://localhost:8082/sales-post-enc/*" + ], + "attributes": { + "saml_assertion_consumer_url_post": "http://localhost:8082/sales-post-enc/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/sales-post-enc/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/sales-post-enc/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/sales-post-enc/saml", + "saml.server.signature": "true", + "saml.signature.algorithm": "RSA_SHA512", + "saml.client.signature": "true", + "saml.encrypt": "true", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB1DCCAT0CBgFJGVacCDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1lbmMvMB4XDTE0MTAxNjE0MjA0NloXDTI0MTAxNjE0MjIyNlowMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3QtZW5jLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2+5MCT5BnVN+IYnKZcH6ev1pjXGi4feE0nOycq/VJ3aeaZMi4G9AxOxCBPupErOC7Kgm/Bw5AdJyw+Q12wSRXfJ9FhqCrLXpb7YOhbVSTJ8De5O8mW35DxAlh/cxe9FXjqPb286wKTUZ3LfGYR+X235UQeCTAPS/Ufi21EXaEikCAwEAATANBgkqhkiG9w0BAQsFAAOBgQBMrfGD9QFfx5v7ld/OAto5rjkTe3R1Qei8XRXfcs83vLaqEzjEtTuLGrJEi55kXuJgBpVmQpnwCCkkjSy0JxbqLDdVi9arfWUxEGmOr01ZHycELhDNaQcFqVMPr5kRHIHgktT8hK2IgCvd3Fy9/JCgUgCPxKfhwecyEOKxUc857g==", + "saml.encryption.certificate": "MIIB1DCCAT0CBgFJGVacCDANBgkqhkiG9w0BAQsFADAwMS4wLAYDVQQDEyVodHRwOi8vbG9jYWxob3N0OjgwODAvc2FsZXMtcG9zdC1lbmMvMB4XDTE0MTAxNjE0MjA0NloXDTI0MTAxNjE0MjIyNlowMDEuMCwGA1UEAxMlaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NhbGVzLXBvc3QtZW5jLzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2+5MCT5BnVN+IYnKZcH6ev1pjXGi4feE0nOycq/VJ3aeaZMi4G9AxOxCBPupErOC7Kgm/Bw5AdJyw+Q12wSRXfJ9FhqCrLXpb7YOhbVSTJ8De5O8mW35DxAlh/cxe9FXjqPb286wKTUZ3LfGYR+X235UQeCTAPS/Ufi21EXaEikCAwEAATANBgkqhkiG9w0BAQsFAAOBgQBMrfGD9QFfx5v7ld/OAto5rjkTe3R1Qei8XRXfcs83vLaqEzjEtTuLGrJEi55kXuJgBpVmQpnwCCkkjSy0JxbqLDdVi9arfWUxEGmOr01ZHycELhDNaQcFqVMPr5kRHIHgktT8hK2IgCvd3Fy9/JCgUgCPxKfhwecyEOKxUc857g==" + } + }, + { + "name": "http://localhost:8082/employee-sig/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/employee-sig", + "redirectUris": [ + "http://localhost:8082/employee-sig/*" + ], + "adminUrl": "http://localhost:8082/employee-sig/saml", + "attributes": { + "saml.server.signature": "true", + "saml.client.signature": "true", + "saml.signature.algorithm": "RSA_SHA256", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB0DCCATkCBgFJH5u0EDANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDEyNodHRwOi8vbG9jYWxob3N0OjgwODAvZW1wbG95ZWUtc2lnLzAeFw0xNDEwMTcxOTMzNThaFw0yNDEwMTcxOTM1MzhaMC4xLDAqBgNVBAMTI2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9lbXBsb3llZS1zaWcvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+9kVgPFpshjS2aT2g52lqTv2lqb1jgvXZVk7iFF4LAO6SdCXKXRZI4SuzIRkVNpE1a42V1kQRlaozoFklgvX5sje8tkpa9ylq+bxGXM9RRycqRu2B+oWUV7Aqq7Bs0Xud0WeHQYRcEoCjqsFKGy65qkLRDdT70FTJgpSHts+gDwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBACKyPLGqMX8GsIrCfJU8eVnpaqzTXMglLVo/nTcfAnWe9UAdVe8N3a2PXpDBvuqNA/DEAhVcQgxdlOTWnB6s8/yLTRuH0bZgb3qGdySif+lU+E7zZ/SiDzavAvn+ABqemnzHcHyhYO+hNRGHvUbW5OAii9Vdjhm8BI32YF1NwhKp" + } + }, + { + "name": "http://localhost:8082/employee/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/employee/", + "redirectUris": [ + "http://localhost:8082/employee/*" + ], + "adminUrl": "http://localhost:8082/employee/saml", + "attributes": { + "saml.authnstatement": "true" + }, + "protocolMappers": [ + { + "name": "email", + "protocol": "saml", + "protocolMapper": "saml-user-property-mapper", + "consentRequired": false, + "config": { + "user.attribute": "email", + "friendly.name": "email", + "attribute.name": "urn:oid:1.2.840.113549.1.9.1", + "attribute.nameformat": "URI Reference" + } + }, + { + "name": "phone", + "protocol": "saml", + "protocolMapper": "saml-user-attribute-mapper", + "consentRequired": false, + "config": { + "user.attribute": "phone", + "attribute.name": "phone", + "attribute.nameformat": "Basic" + } + }, + { + "name": "role-list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "attribute.name": "Role", + "attribute.nameformat": "Basic", + "single": "false" + } + } + ] + }, + { + "name": "http://localhost:8082/employee2/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "baseUrl": "http://localhost:8082/employee2/", + "redirectUris": [ + "http://localhost:8082/employee2/*" + ], + "adminUrl": "http://localhost:8082/employee2/saml", + "attributes": { + "saml.authnstatement": "true" + }, + "protocolMappers": [ + { + "name": "email", + "protocol": "saml", + "protocolMapper": "saml-user-property-mapper", + "consentRequired": false, + "config": { + "user.attribute": "email", + "friendly.name": "email", + "attribute.name": "urn:oid:1.2.840.113549.1.9.1", + "attribute.nameformat": "URI Reference" + } + }, + { + "name": "phone", + "protocol": "saml", + "protocolMapper": "saml-user-attribute-mapper", + "consentRequired": false, + "config": { + "user.attribute": "phone", + "attribute.name": "phone", + "attribute.nameformat": "Basic" + } + }, + { + "name": "role-list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "attribute.name": "Role", + "attribute.nameformat": "Basic", + "single": "false" + } + } + ] + }, + { + "name": "http://localhost:8082/employee-sig-front/", + "enabled": true, + "protocol": "saml", + "fullScopeAllowed": true, + "frontchannelLogout": true, + "baseUrl": "http://localhost:8082/employee-sig-front/", + "redirectUris": [ + "http://localhost:8082/employee-sig-front/*" + ], + "attributes": { + "saml_assertion_consumer_url_post": "http://localhost:8082/employee-sig-front/saml", + "saml_assertion_consumer_url_redirect": "http://localhost:8082/employee-sig-front/saml", + "saml_single_logout_service_url_post": "http://localhost:8082/employee-sig-front/saml", + "saml_single_logout_service_url_redirect": "http://localhost:8082/employee-sig-front/saml", + "saml.server.signature": "true", + "saml.client.signature": "true", + "saml.signature.algorithm": "RSA_SHA1", + "saml.authnstatement": "true", + "saml.signing.certificate": "MIIB0DCCATkCBgFJH5u0EDANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDEyNodHRwOi8vbG9jYWxob3N0OjgwODAvZW1wbG95ZWUtc2lnLzAeFw0xNDEwMTcxOTMzNThaFw0yNDEwMTcxOTM1MzhaMC4xLDAqBgNVBAMTI2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9lbXBsb3llZS1zaWcvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+9kVgPFpshjS2aT2g52lqTv2lqb1jgvXZVk7iFF4LAO6SdCXKXRZI4SuzIRkVNpE1a42V1kQRlaozoFklgvX5sje8tkpa9ylq+bxGXM9RRycqRu2B+oWUV7Aqq7Bs0Xud0WeHQYRcEoCjqsFKGy65qkLRDdT70FTJgpSHts+gDwIDAQABMA0GCSqGSIb3DQEBCwUAA4GBACKyPLGqMX8GsIrCfJU8eVnpaqzTXMglLVo/nTcfAnWe9UAdVe8N3a2PXpDBvuqNA/DEAhVcQgxdlOTWnB6s8/yLTRuH0bZgb3qGdySif+lU+E7zZ/SiDzavAvn+ABqemnzHcHyhYO+hNRGHvUbW5OAii9Vdjhm8BI32YF1NwhKp" + } + } + ], + "groups" : [ + { + "name": "top", + "attributes": { + "topAttribute": ["true"] + + }, + "realmRoles": ["manager"], + "subGroups": [ + { + "name": "level2", + "realmRoles": ["user"], + "attributes": { + "level2Attribute": ["true"] + + } + } + ] + } + ], + "roles" : { + "realm" : [ + { + "name": "manager", + "description": "Have Manager privileges" + }, + { + "name": "user", + "description": "Have User privileges" + } + ], + "application" : { + "http://localhost:8082/employee/" : [ + { + "name": "employee", + "description": "Have Employee privileges" + } + ], + "http://localhost:8082/employee2/" : [ + { + "name": "employee", + "description": "Have Employee privileges" + } + ] + } + } +} diff --git a/testsuite/jetty/pom.xml b/testsuite/jetty/pom.xml index fba74a94bcf..25d61cbfd10 100755 --- a/testsuite/jetty/pom.xml +++ b/testsuite/jetty/pom.xml @@ -34,5 +34,6 @@ jetty81 jetty91 jetty92 + jetty93