diff --git a/www/shib13/sp/idpdisco.php b/www/shib13/sp/idpdisco.php new file mode 100644 index 0000000000000000000000000000000000000000..56783dd7730446e6950a7ef9aee1f41c82d896b5 --- /dev/null +++ b/www/shib13/sp/idpdisco.php @@ -0,0 +1,60 @@ +<?php + +require_once('../../_include.php'); + + +require_once('SimpleSAML/Utilities.php'); +require_once('SimpleSAML/Session.php'); +require_once('SimpleSAML/XHTML/Template.php'); +require_once('SimpleSAML/XML/MetaDataStore.php'); + +session_start(); + +$config = SimpleSAML_Configuration::getInstance(); +$metadata = new SimpleSAML_XML_MetaDataStore($config); + + +$session = SimpleSAML_Session::getInstance(); + +try { + + if (!isset($_GET['entityID'])) throw new Exception('Missing parameter: entityID'); + if (!isset($_GET['return'])) throw new Exception('Missing parameter: return'); + if (!isset($_GET['returnIDParam'])) throw new Exception('Missing parameter: returnIDParam'); + + $spentityid = $_GET['entityID']; + $return = $_GET['return']; + $returnidparam = $_GET['returnIDParam']; + +} catch (Exception $exception) { + + $et = new SimpleSAML_XHTML_Template($config, 'error.php'); + $et->data['message'] = 'Error getting required parameters for IdP Discovery Service'; + $et->data['e'] = $exception; + $et->show(); + exit(0); +} + + +if (isset($_GET['idpentityid'])) { + + $idpentityid = $_GET['idpentityid']; + + $returnurl = SimpleSAML_Utilities::addURLparameter($return, $returnidparam . '=' . $idpentityid); + header('Location: ' . $returnurl); + exit(0); +} + + +$idplist = $metadata->getList('shib13-idp-remote'); + + +$t = new SimpleSAML_XHTML_Template($config, 'selectidp.php'); +$t->data['header'] = 'Select your identity provider'; +$t->data['idplist'] = $idplist; +$t->data['urlpattern'] = htmlentities(SimpleSAML_Utilities::selfURL() . '&idpentityid='); +$t->show(); + + + +?> \ No newline at end of file diff --git a/www/shib13/sp/initSSO.php b/www/shib13/sp/initSSO.php index ccb3a799df93fbfc9de2cc42994560a58b86e26b..fd7344a14f8913f350ad3c7bc6c772ff05f5b33b 100644 --- a/www/shib13/sp/initSSO.php +++ b/www/shib13/sp/initSSO.php @@ -45,6 +45,18 @@ try { if (!isset($session) || !$session->isValid() ) { + + if ($idpentityid == null) { + + $returnURL = urlencode(SimpleSAML_Utilities::selfURL()); + $discservice = '/' . $config->getValue('baseurlpath') . 'shib13/sp/idpdisco.php?entityID=' . $spentityid . + '&return=' . $returnURL . '&returnIDParam=idpentityid'; + header('Location: ' . $discservice); + exit(0); + + } + + try { $ar = new SimpleSAML_XML_Shib13_AuthnRequest($config, $metadata); $ar->setIssuer($spentityid);