SimpleSAMLphp SP

Z PIONIER.Id
Wersja z dnia 15:26, 23 lut 2023 autorstwa Mwolniewicz (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania


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.