diff --git a/lib/SimpleSAML/XHTML/IdPDisco.php b/lib/SimpleSAML/XHTML/IdPDisco.php index f35555fb20d962c74f54641e84b54286f8710424..8956cae5bfc43020b0c07aa451789969f57d8d8a 100644 --- a/lib/SimpleSAML/XHTML/IdPDisco.php +++ b/lib/SimpleSAML/XHTML/IdPDisco.php @@ -482,6 +482,11 @@ class SimpleSAML_XHTML_IdPDisco { if (sizeof($idpintersection) > 0) { $idpList = array_intersect_key($idpList, array_fill_keys($idpintersection, NULL)); } + + if(sizeof($idpintersection) == 1) { + $this->log('Choice made [' . $idpintersection[0] . '] (Redirecting the user back. returnIDParam=' . $this->returnIdParam . ')'); + SimpleSAML_Utilities::redirect($this->returnURL, array($this->returnIdParam => $idpintersection[0])); + } /* * Make use of an XHTML template to present the select IdP choice to the user. @@ -510,4 +515,4 @@ class SimpleSAML_XHTML_IdPDisco { } } -?> \ No newline at end of file +?> diff --git a/modules/saml/lib/Auth/Source/SP.php b/modules/saml/lib/Auth/Source/SP.php index c4705117b21d11213b5cee67e75c082dd0b92ddb..7224b6130de87c22e15e7bb238149f5c5b3f7067 100644 --- a/modules/saml/lib/Auth/Source/SP.php +++ b/modules/saml/lib/Auth/Source/SP.php @@ -212,9 +212,9 @@ class sspmod_saml_Auth_Source_SP extends SimpleSAML_Auth_Source { if (isset($state['saml:IDPList'])) { $IDPList = $state['saml:IDPList']; } else { - $IDPList = array(); - } - + $IDPList = array(); + } + $ar->setIDPList(array_unique(array_merge($this->metadata->getArray('IDPList', array()), $idpMetadata->getArray('IDPList', array()), (array) $IDPList))); @@ -294,12 +294,18 @@ class sspmod_saml_Auth_Source_SP extends SimpleSAML_Auth_Source { } $returnTo = SimpleSAML_Module::getModuleURL('saml/sp/discoresp.php', array('AuthID' => $id)); - - SimpleSAML_Utilities::redirect($discoURL, array( - 'entityID' => $this->entityId, - 'return' => $returnTo, - 'returnIDParam' => 'idpentityid') - ); + + $params = array( + 'entityID' => $this->entityId, + 'return' => $returnTo, + 'returnIDParam' => 'idpentityid' + ); + + if(isset($state['saml:IDPList'])) { + $params['IDPList'] = $state['saml:IDPList']; + } + + SimpleSAML_Utilities::redirect($discoURL, $params); } @@ -482,4 +488,4 @@ class sspmod_saml_Auth_Source_SP extends SimpleSAML_Auth_Source { SimpleSAML_Auth_Source::completeAuth($state); } -} \ No newline at end of file +}