diff --git a/saml-core/src/main/java/org/keycloak/saml/SAMLRequestParser.java b/saml-core/src/main/java/org/keycloak/saml/SAMLRequestParser.java index fb4fa0a854..ea24954d0d 100755 --- a/saml-core/src/main/java/org/keycloak/saml/SAMLRequestParser.java +++ b/saml-core/src/main/java/org/keycloak/saml/SAMLRequestParser.java @@ -1,5 +1,7 @@ package org.keycloak.saml; +import org.jboss.logging.Logger; +import org.keycloak.common.util.StreamUtil; import org.keycloak.saml.common.PicketLinkLogger; import org.keycloak.saml.common.PicketLinkLoggerFactory; import org.keycloak.saml.processing.api.saml.v2.request.SAML2Request; @@ -9,6 +11,7 @@ import org.keycloak.saml.processing.web.util.PostBindingUtil; import org.keycloak.saml.processing.web.util.RedirectBindingUtil; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; /** @@ -17,10 +20,23 @@ import java.io.InputStream; */ public class SAMLRequestParser { private static final PicketLinkLogger logger = PicketLinkLoggerFactory.getLogger(); + protected static Logger log = Logger.getLogger(SAMLRequestParser.class); public static SAMLDocumentHolder parseRequestRedirectBinding(String samlMessage) { InputStream is; is = RedirectBindingUtil.base64DeflateDecode(samlMessage); + if (log.isDebugEnabled()) { + String message = null; + try { + message = StreamUtil.readString(is); + } catch (IOException e) { + throw new RuntimeException(e); + } + log.debug("SAML Redirect Binding"); + log.debug(message); + is = new ByteArrayInputStream(message.getBytes()); + + } SAML2Request saml2Request = new SAML2Request(); try { saml2Request.getSAML2ObjectFromStream(is); @@ -35,6 +51,11 @@ public class SAMLRequestParser { public static SAMLDocumentHolder parseRequestPostBinding(String samlMessage) { InputStream is; byte[] samlBytes = PostBindingUtil.base64Decode(samlMessage); + if (log.isDebugEnabled()) { + String str = new String(samlBytes); + log.debug("SAML POST Binding"); + log.debug(str); + } is = new ByteArrayInputStream(samlBytes); SAML2Request saml2Request = new SAML2Request(); try { @@ -48,10 +69,15 @@ public class SAMLRequestParser { public static SAMLDocumentHolder parseResponsePostBinding(String samlMessage) { byte[] samlBytes = PostBindingUtil.base64Decode(samlMessage); + log.debug("SAML POST Binding"); return parseResponseDocument(samlBytes); } public static SAMLDocumentHolder parseResponseDocument(byte[] samlBytes) { + if (log.isDebugEnabled()) { + String str = new String(samlBytes); + log.debug(str); + } InputStream is = new ByteArrayInputStream(samlBytes); SAML2Response response = new SAML2Response(); try { @@ -65,6 +91,18 @@ public class SAMLRequestParser { public static SAMLDocumentHolder parseResponseRedirectBinding(String samlMessage) { InputStream is = RedirectBindingUtil.base64DeflateDecode(samlMessage); + if (log.isDebugEnabled()) { + String message = null; + try { + message = StreamUtil.readString(is); + } catch (IOException e) { + throw new RuntimeException(e); + } + log.debug("SAML Redirect Binding"); + log.debug(message); + is = new ByteArrayInputStream(message.getBytes()); + + } SAML2Response response = new SAML2Response(); try { response.getSAML2ObjectFromStream(is); diff --git a/services/pom.xml b/services/pom.xml index 64c4221995..87de333205 100755 --- a/services/pom.xml +++ b/services/pom.xml @@ -61,7 +61,6 @@ org.jboss.logging jboss-logging-annotations provided - true org.jboss.logging diff --git a/services/src/main/java/org/keycloak/broker/saml/SAMLEndpoint.java b/services/src/main/java/org/keycloak/broker/saml/SAMLEndpoint.java index c754258ecb..c60ac0ccdf 100755 --- a/services/src/main/java/org/keycloak/broker/saml/SAMLEndpoint.java +++ b/services/src/main/java/org/keycloak/broker/saml/SAMLEndpoint.java @@ -434,7 +434,7 @@ public class SAMLEndpoint { @Override protected SAMLDocumentHolder extractResponseDocument(String response) { - return SAMLRequestParser.parseRequestRedirectBinding(response); + return SAMLRequestParser.parseResponseRedirectBinding(response); } @Override diff --git a/services/src/main/java/org/keycloak/protocol/saml/SamlService.java b/services/src/main/java/org/keycloak/protocol/saml/SamlService.java index b598576531..0260fc7aba 100755 --- a/services/src/main/java/org/keycloak/protocol/saml/SamlService.java +++ b/services/src/main/java/org/keycloak/protocol/saml/SamlService.java @@ -429,7 +429,7 @@ public class SamlService extends AuthorizationEndpointBase { @Override protected SAMLDocumentHolder extractResponseDocument(String response) { - return SAMLRequestParser.parseRequestRedirectBinding(response); + return SAMLRequestParser.parseResponseRedirectBinding(response); } @Override diff --git a/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java b/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java old mode 100644 new mode 100755 index 1d7616f37a..7715a59440 --- a/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java +++ b/services/src/main/java/org/keycloak/services/DefaultKeycloakSessionFactory.java @@ -69,7 +69,17 @@ public class DefaultKeycloakSessionFactory implements KeycloakSessionFactory { ProviderManager pm = new ProviderManager(getClass().getClassLoader(), Config.scope().getArray("providers")); - for (Spi spi : ServiceLoader.load(Spi.class, getClass().getClassLoader())) { + ServiceLoader load = ServiceLoader.load(Spi.class, getClass().getClassLoader()); + loadSPIs(pm, load); + for ( Map factories : factoriesMap.values()) { + for (ProviderFactory factory : factories.values()) { + factory.postInit(this); + } + } + } + + protected void loadSPIs(ProviderManager pm, ServiceLoader load) { + for (Spi spi : load) { Map factories = new HashMap(); factoriesMap.put(spi.getProviderClass(), factories); @@ -118,11 +128,6 @@ public class DefaultKeycloakSessionFactory implements KeycloakSessionFactory { } } } - for ( Map factories : factoriesMap.values()) { - for (ProviderFactory factory : factories.values()) { - factory.postInit(this); - } - } } public KeycloakSession create() { diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml index 4db1a91382..20f0387621 100755 --- a/testsuite/integration/pom.xml +++ b/testsuite/integration/pom.xml @@ -92,6 +92,10 @@ org.apache.httpcomponents httpclient + + org.keycloak + keycloak-server-spi + org.keycloak keycloak-ldap-federation diff --git a/testsuite/integration/src/test/resources/log4j.properties b/testsuite/integration/src/test/resources/log4j.properties index 3a6fe1d809..2c2eb300b4 100755 --- a/testsuite/integration/src/test/resources/log4j.properties +++ b/testsuite/integration/src/test/resources/log4j.properties @@ -38,6 +38,7 @@ log4j.logger.org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterP # Enable to view detailed AS REQ and TGS REQ requests to embedded Kerberos server # log4j.logger.org.apache.directory.server.kerberos=debug +log4j.logger.org.keycloak.saml=debug log4j.logger.org.xnio=off log4j.logger.org.hibernate=off