From d1f38a4236e8d36cae1174a2d2524fc03bb04872 Mon Sep 17 00:00:00 2001 From: pedroigor Date: Wed, 21 Jan 2015 23:53:56 -0200 Subject: [PATCH] [KEYCLOAK-987] - IdP should respect the protocol binding when processing AuthnRequest. --- .../org/keycloak/protocol/saml/SamlService.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/saml/saml-protocol/src/main/java/org/keycloak/protocol/saml/SamlService.java b/saml/saml-protocol/src/main/java/org/keycloak/protocol/saml/SamlService.java index a9797e5a2a..e4bacf9c2d 100755 --- a/saml/saml-protocol/src/main/java/org/keycloak/protocol/saml/SamlService.java +++ b/saml/saml-protocol/src/main/java/org/keycloak/protocol/saml/SamlService.java @@ -220,7 +220,7 @@ public class SamlService { clientSession.setRedirectUri(redirect); clientSession.setAction(ClientSessionModel.Action.AUTHENTICATE); clientSession.setNote(ClientSessionCode.ACTION_KEY, KeycloakModelUtils.generateCodeSecret()); - clientSession.setNote(SamlProtocol.SAML_BINDING, getBindingType()); + clientSession.setNote(SamlProtocol.SAML_BINDING, getBindingType(requestAbstractType)); clientSession.setNote(GeneralConstants.RELAY_STATE, relayState); clientSession.setNote(SamlProtocol.SAML_REQUEST_ID, requestAbstractType.getID()); @@ -258,6 +258,20 @@ public class SamlService { return forms.createLogin(); } + private String getBindingType(AuthnRequestType requestAbstractType) { + URI requestedProtocolBinding = requestAbstractType.getProtocolBinding(); + + if (requestedProtocolBinding != null) { + if (JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get().equals(requestedProtocolBinding.toString())) { + return SamlProtocol.SAML_POST_BINDING; + } else { + return SamlProtocol.SAML_GET_BINDING; + } + } + + return getBindingType(); + } + private boolean isSupportedNameIdFormat(String nameIdFormat) { if (nameIdFormat.equals(JBossSAMLURIConstants.NAMEID_FORMAT_EMAIL.get()) || nameIdFormat.equals(JBossSAMLURIConstants.NAMEID_FORMAT_TRANSIENT.get()) ||