diff --git a/lib/SimpleSAML/Metadata/SAMLParser.php b/lib/SimpleSAML/Metadata/SAMLParser.php index 9f3294f310bb5aa8c08277e48877735a88ba0105..7ea454bc7ef415018c8936fc3e6244bea5acc013 100644 --- a/lib/SimpleSAML/Metadata/SAMLParser.php +++ b/lib/SimpleSAML/Metadata/SAMLParser.php @@ -609,6 +609,9 @@ class SimpleSAML_Metadata_SAMLParser { $slo = $this->getDefaultEndpoint($spd['singleLogoutServices'], array(self::SAML_20_REDIRECT_BINDING)); if($slo !== NULL) { $ret['SingleLogoutService'] = $slo['location']; + if (isset($slo['responseLocation']) && $slo['location'] != $slo['responseLocation']) { + $ret['SingleLogoutServiceResponse'] = $slo['responseLocation']; + } } diff --git a/lib/SimpleSAML/XML/SAML20/LogoutResponse.php b/lib/SimpleSAML/XML/SAML20/LogoutResponse.php index c87ac65c71c0421871dce795a8c80cc9fce75e94..0ce4586c7e5267ade2f3eb307f2803115b59acc1 100644 --- a/lib/SimpleSAML/XML/SAML20/LogoutResponse.php +++ b/lib/SimpleSAML/XML/SAML20/LogoutResponse.php @@ -3,7 +3,7 @@ /** * Implementation of the SAML 2.0 LogoutResponse message. * - * @author Andreas Ĺkre Solberg, UNINETT AS. <andreas.solberg@uninett.no> + * @author Andreas Ă…kre Solberg, UNINETT AS. <andreas.solberg@uninett.no> * @package simpleSAMLphp * @version $Id$ */ @@ -117,6 +117,9 @@ class SimpleSAML_XML_SAML20_LogoutResponse { $issueInstant = SimpleSAML_Utilities::generateTimestamp(); $destination = $receivermd['SingleLogoutService']; + if (isset($receivermd['SingleLogoutServiceResponse'])) { + $destination = $receivermd['SingleLogoutServiceResponse']; + } $samlResponse = '<samlp:LogoutResponse xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" diff --git a/www/saml2/idp/SingleLogoutService.php b/www/saml2/idp/SingleLogoutService.php index 04809ac7b2634a08cc4d74476f7361e604f57cbd..e717ea62e51af68aa301c43234c85cd96b842c23 100644 --- a/www/saml2/idp/SingleLogoutService.php +++ b/www/saml2/idp/SingleLogoutService.php @@ -358,7 +358,7 @@ try { $relayState = isset($logoutInfo['RelayState']) ? $logoutInfo['RelayState'] : null; // Parameters: $request, $remoteentityid, $relayState = null, $endpoint = 'SingleLogoutService', $direction = 'SAMLRequest', $mode = 'SP' - $httpredirect->sendMessage($logoutResponseXML, $idpentityid, $logoutInfo['Issuer'], $relayState, 'SingleLogoutService', 'SAMLResponse', 'IdP'); + $httpredirect->sendMessage($logoutResponseXML, $idpentityid, $logoutInfo['Issuer'], $relayState, 'SingleLogoutServiceResponse', 'SAMLResponse', 'IdP'); exit; } elseif (array_key_exists('RelayState', $logoutInfo)) {