diff --git a/www/example-simple/wsfed-example.php b/www/example-simple/wsfed-example.php index 883d45599b5993c4151528bbdb23043712b16f09..3136f61afa0cff069443066729d5f563fc194ca9 100644 --- a/www/example-simple/wsfed-example.php +++ b/www/example-simple/wsfed-example.php @@ -21,7 +21,7 @@ $t->data['remaining'] = $session->remainingTime(); $t->data['sessionsize'] = $session->getSize(); $t->data['attributes'] = $attributes; $t->data['icon'] = 'bino.png'; -$t->data['logout'] = null; +$t->data['logouturl'] = '/' . $config->getBaseURL() . 'wsfed/sp/initSLO.php?RelayState=/' . $config->getBaseURL() . 'logout.php'; $t->show(); diff --git a/www/wsfed/sp/initSLO.php b/www/wsfed/sp/initSLO.php new file mode 100644 index 0000000000000000000000000000000000000000..02b9e2f10cba2b0ccd5a16dc05ecd62cee1915b8 --- /dev/null +++ b/www/wsfed/sp/initSLO.php @@ -0,0 +1,61 @@ +<?php + +require_once('../../_include.php'); + +$config = SimpleSAML_Configuration::getInstance(); + +$session = SimpleSAML_Session::getInstance(); + +SimpleSAML_Logger::info('WS-Fed - SP.initSLO: Accessing WS-Fed SP initSLO script'); + +if (!$config->getValue('enable.wsfed-sp', false)) + SimpleSAML_Utilities::fatalError($session->getTrackID(), 'NOACCESS'); + + +if (isset($_REQUEST['RelayState'])) { + $returnTo = $_REQUEST['RelayState']; +} else { + SimpleSAML_Utilities::fatalError($session->getTrackID(), 'NORELAYSTATE'); +} + + +if (isset($session) ) { + + try { + + $metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler(); + + $idpentityid = $session->getIdP(); + $spentityid = isset($_GET['spentityid']) ? $_GET['spentityid'] : $metadata->getMetaDataCurrentEntityID(); + + /** + * Create a logout request + */ + + $session->doLogout(); + + SimpleSAML_Logger::info('WS-Fed - SP.initSLO: SP (' . $spentityid . ') is sending logout request to IdP (' . $idpentityid . ')'); + + $idpmeta = $metadata->getMetaData($idpentityid, 'wsfed-idp-remote'); + + SimpleSAML_Utilities::redirect($idpmeta['prp'], array( + 'wa' => 'wsignout1.0', + 'wct' => gmdate('Y-m-d\TH:i:s\Z', time()), + 'wtrealm' => $spentityid, + 'wctx' => $returnTo + )); + + + } catch(Exception $exception) { + SimpleSAML_Utilities::fatalError($session->getTrackID(), 'CREATEREQUEST', $exception); + } + +} else { + + SimpleSAML_Logger::info('WS-Fed - SP.initSLO: User is already logged out. Go back to relaystate'); + SimpleSAML_Utilities::redirect($returnTo); + +} + + +?> \ No newline at end of file