SimpleSAMLphp SP
Instalacja SimpleSAMLphp SP
Aplikacja - Service Provider jest przygotowana w PHP. Celem jest włączenie logowania federacyjnego, czyli logowania poprzez wskazanego dostawcę tożsamości. Aplikacja ma być dostępna pod adresem https://sp.example.pl/mysp
Instalacja
- załóżmy, że nazwa naszego serwera to sp.example.pl, serwer o tej nazwie należy skonfigurować jako wirtualny serwer https (port 443), zaleca się również realizację przekierowania adresu http://sp.example.pl na http://sp.example.pl, np:
<VirtualHost *:80> ServerName sp.example.pl DocumentRoot /var/www/html RedirectMatch 301 ^/mysp(.*) https://sp.example.pl/mysp$1 </VirtualHost>
- w konfiguracji serwera SSL podajemy klucz prywatny serwera (SSLCertificateKeyFile) oraz certyfikat serwera (SSLCertificateFile) i plik zawierający łańcuch certyfikatów wystawców (SSLCACertificateFile) - należy użyć znanego wystawcy certyfikatów, wymogi spełniają certyfikaty TCS, również tzw. wildcard (czyli wystawione dla nazwy *.example.pl)
- dodajemy w sekcji wirtualnego hosta SSL
Alias /mysp /usr/local/simplesamlphp-1.13.2/www
Konfiguracja SimpleSAMLphp SP
Opis instalacji jest dostępny na stronie Konfiguracja SimpleSAMLphpSP
Plik config/authsources.php
Dostosowujemy wpis 'default-sp':
- odkomentowujemy 'signature.algorithm', aby realizowany był podpis SHA-256
- dodajemy wskazania do pliku klucza prywatnego i certyfikatu
- dodajemy filtr konwerujący atrybuty z postaci OID do nazwy
'default-sp' => array( 'saml:SP', 'signature.algorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', 'privatekey' => 'example.pl.key', 'certificate' => 'example.pl.pem', 'authproc' => array( 80 => array('class' => 'core:AttributeMap', 'oid2name'), ), ),
Ładowanie metadanych dostawców tożsamości, z którymi ma współpracować SP
Korzystamy ze skonfigurowanego wcześniej modułu metarefresh. Jeśli chcemy pobrać metadane IdP, np. IdP testowego, by umożliwić sprawdzenie czy testowa aplikacja współpracuje z tym dostawcą, wykonujemy polecenie:
./modules/metarefresh/bin/metarefresh.php -o=tmp-testidp adres_metadanych(URL)
W katalogu ./tmp-testidp pojawią się pliki saml20-idp-remote.php i shib13-idp-remote.php. Zawartość pliku saml20-idp-remote.php kopiujemy do ./metadata/saml20-idp-remote.php
Metadane PIONIER.Id
SP umożliwia logowanie federacyjne. Jeśli ma być oferowane logowanie wyłącznie poprzez IdP w federacji PIONIER.Id, to ładujemy metadane PIONIER.Id, dostępne pod adresem https://aai.pionier.net.pl/pionierid.xml. SP musi regularnie odświeżać te dane.
Metadane PIONIER.Id-eduGAIN
Jeśli dostawca usługi ma akceptować logowania członków eduGAIN, konieczne będzie regularne pobieranie metadanych eduGAIN przygotowanych przez federację PIONIER.Id, dostępnych pod adresem https://aai.pionier.net.pl/pionierid-edugain-idp-feed.xml. Aby regularnie pobierać metadane, wykonujemy następujące kroki:
- Dodajemy w pliku config/config-metarefresh.php wpis:
'edugain-sp' => array( 'cron' => array('hourly'), 'sources' => array( array( 'src' => 'https://aai.pionier.net.pl/pionierid-edugain-idp-feed.xml', 'validateFingerprint' => 'D6:84:09:2D:F7:95:B4:96:8A:F7:61:3A:F5:3E:EC:C6:4B:DF:73:5B', ), ), 'expireAfter' => 60*60*24*4, // Maximum 4 days cache time. 'outputDir' => 'metadata/edugain-sp/', 'outputFormat' => 'flatfile', ),
- Tworzymy katalog metadata/edugain-idp/ z prawami zapisu dla użytkownika, pod którym pracuje httpd
- Dodajemy do crontaba wpis wg tego co podaje strona
https://sp.example.pl/mysp/module.php/cron/croninfo.php (dostępna po zalogowaniu jako administrator), np.
10 * * * * curl --silent "https://sp.example.pl/mysp/module.php/cron/cron.php?key=0oki8uh&tag=daily"> /dev/null 2>&1
Można również z tej strony uruchomić zadanie natychmiast przez kliknięcie "Run [hourly]"
- Zaplanowane zadanie odświeżania metadanych będzie realizowane w wyznaczonych godzinach.
W pliku config/config.php we wpisie 'metadata.sources' należy dodać:
array('type' => 'flatfile', 'directory' => 'metadata/edugain-idp'),
Metadane te zawierają również dostawców tożsamości z PIONIER.Id, a więc po włączeniu ich pobierania należy wyłaczyć metadane PIONIER.Id, tj. anulować zadanie w crontab i usunąć wskazanie katalogu metadata/pionierid w parametrze metadata.sources w pliku config/config.php.
Federacyjne logowanie w aplikacji
<?php require_once('/usr/local/sp/lib/_autoload.php'); $as = new SimpleSAML_Auth_Simple('default-sp'); $as->requireAuth(); $attributes = $as->getAttributes(); ?> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <html> <head><title>Usługa federacyjna w PHP</title></head> <body> <h1>Moja pierwsza usługa korzystająca z PHP</h1> <p>Witajcie!</p> <h2>Poniżej Twoje atrybuty:</h2> <ul> <?php foreach ($attributes as $type=>$value) { print '<li>'; print "$type => ".join(', ',$value); } ?> </body></html>
Discovery Service (DS) - usługa poszukiwania dostawcy tożsamości
Discovery Service (DS), czy Where Are You From(WAYF) to usługi oferujące wsparcie SP na etapie poszukiwania dostawcy tożsamości.
SimpleSAMLphp ma wewnętrzną funkcjonalność prezentowania listy dostępnych dostawców tożsamości. Lista obejmuje wszystkich dostawców tożsamości umieszczonych w plikach wskazanych jako źródła metadanych - parametr metadata.sources w pliku config/config.php. Domyślne ustawienie to:
'idpdisco.layout' => 'dropdown',
oznaczające, że prezentowana będzie rozwijalna lista dostawców tożsamości. Alternatywna wartość parametru to links, powoduje ona, że prezentowana jest pełna lista linków do dostawców.
Ustawiając parametr idpdisco.extDiscoveryStorage można wymusić użycie zewnętrznej usługi DS/WAYF"
'idpdisco.extDiscoveryStorage' => 'https://aai.pionier.net.pl/WAYF',
Innym podejściem jest zastosowanie usługi DiscoJuice DiscoJuice.