Server auth.fit.vut.cz nabízí služby SSO IdP (Single Sing-On Identity Provider) centrálního VUT přihlášení pomocí protokolu SAML2. Využívá knihovnu SimpleSAMLphp.
Na serveru, který potřebuje uživatele autentizovat je nutné knihovnu také nainstalovat a nastavit tak, aby se chovala jako SP (Service Provider). Samozřejmě je možné využít jakoukoli jinou knihovnu nebo vlastní implementaci. V tomto případě po zprovoznění zašlete správci IdP (Marek Kuchynka) soubor s metadaty ve formátu XML nebo odkaz, kde lze tato metadata přečíst. Příklad takových metadat zde.
Postupujte podle návodu na oficiálních stránkách SimpleSAMLphp: https://simplesamlphp.org/docs/stable/simplesamlphp-install.html. Po ověření funkčnosti na URL https://<server>.fit.vutbr.cz/simplesaml (nebo podobné) postupujte k základnímu nastavení SP.
'baseurlpath' => 'https://<server>.fit.vutbr.cz/simplesaml/', 'technicalcontact_name' => 'Ing. Jméno Příjmení', 'technicalcontact_email' => 'login@fit.vut.cz', 'timezone' => 'Europe/Prague', 'secretsalt' => '', // vygenerovat např pomocí: LC_CTYPE=C tr -c -d '0123456789abcdefghijklmnopqrstuvwxyz' </dev/urandom | dd bs=32 count=1 2>/dev/null;echo 'auth.adminpassword' => '', // hash hesla do webové administrace 'admin.protectindexpage' => true, 'admin.protectmetadata' => false, 'showerrors' => false, 'errorreporting' => false, 'language.default' => 'cs',
stačí self-signed certifikát, platnost např. 10 let a uložení do složky cert/
cd cert openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem
POZOR na přístupová práva
soubor config/authsources.php
$config = [ // This is a authentication source which handles admin authentication. 'admin' => [ 'core:AdminPassword', ], 'default' => [ 'saml:SP', 'entityID' => 'https://<server>.fit.vut.cz/simplesaml/module.php/saml/sp/metadata.php/default', // můžete zvolit jak chcete, ale musíte poté používat všude! 'idp' => 'https://auth.fit.vut.cz/saml/idp/', 'discoURL' => null, 'privatekey' => 'saml.pem', 'certificate' => 'saml.crt', // informace o aplikaci pro uživatele (kam povolují předání svých údajů) 'name' => [ 'cs' => '<aplikace> FIT VUT', 'en' => '<application> FIT BUT', ], 'description' => [ 'cs' => '<popis aplikace>', 'en' => '<application description>', ], 'OrganizationName' => [ 'cs' => 'Fakulta informačních technologií Vysokého učení technického v Brně', 'en' => 'Fakulty of Information Technology, Brno University od Technology', ], 'OrganizationDisplayName' => [ 'cs' => 'FIT VUT', 'en' => 'FIT BUT', ], 'OrganizationURL' => [ 'cs' => 'https://fit.vut.cz/.cs', 'en' => 'https://fit.vut.cz/.en', ], 'attributes' => [ 'eduPersonUniqueId' => 'urn:oid:1.3.6.1.4.1.5923.1.1.1.13', // PERID@vutbr.cz 'givenName' => 'urn:oid:2.5.4.42', // Jméno 'sn' => 'urn:oid:2.5.4.4', // Příjmení 'displayName' => 'urn:oid:2.16.840.1.113730.3.1.241', // celé jméno i s tituly 'mail' => 'urn:oid:0.9.2342.19200300.100.1.3', // e-maily 'telephoneNumber' => 'urn:oid:2.5.4.20', // telefony 'eduPersonScopedAffiliation' => 'urn:oid:1.3.6.1.4.1.5923.1.1.1.9',// vztahy k organizaci 'o' => 'urn:oid:2.5.4.10', // hlavní org. jednotka (VUT) 'ou' => 'urn:oid:2.5.4.11', // org. jednotky ], 'attributes.required' => [ 'eduPersonUniqueId', 'o', 'ou', 'eduPersonScopedAffiliation', ], ], ];
metadata získáte od správce formou odkazu na XML soubor
Manuál je určen pro aplikace v PHP. Pokud je aplikace v jiném jazyce, lze použít jinou knihovnu podporující SAML2.
V aplikaci, kde chcete autentizaci použít, je třeba udělat následující:
Veškeré funkce jsou popsány v dokumentaci
Minimalistický příklad by mohl vypadat takto: (test zde)
<?php require_once('/var/simplesamlphp/lib/_autoload.php'); $as = new \SimpleSAML\Auth\Simple('default'); // klíč do pole v souboru config/authsources.php // vynutí přihlášeného uživatele $as->requireAuth($params); // $params je nepovinné pole parametrů: // 'ErrorURL' => URL stránky, která zpracuje chybu autentizace. // 'KeepPost' => bool - budou data zaslaná v POST požadavku zaslána znovu po autentizaci? (výchozí true) // 'ReturnTo' => URL kam se uživatel vrátí po autentizaci (výchozí je aktuální stránka) // 'ReturnCallback' => ( array ) funkce volaná po autentizaci $attributes = $as->getAttributes(); echo "<pre>".print_r($attributes, true)."</pre>";Odkazy pro přihlášení a odhlášení je možné generovat takto: (test zde)
<?php require_once('/var/simplesamlphp/lib/_autoload.php'); $as = new \SimpleSAML\Auth\Simple('default'); // klíč do pole v souboru config/authsources.php // ověří přihlášení if ($as->isAuthenticated()) echo "přihlášen - <a href='".$as->getLogoutURL()."'>odhlásit</a>"; else echo "nepřihlášen - <a href='".$as->getLoginURL()."'>přihlásit</a>"; $attributes = $as->getAttributes(); echo "<pre>".print_r($attributes, true)."</pre>";Případně je možné volat funkce pro přihlášení a odhlášení přímo z PHP:
<?php require_once('/var/simplesamlphp/lib/_autoload.php'); $as = new \SimpleSAML\Auth\Simple('default'); // klíč do pole v souboru config/authsources.php if (...) $as->login($params); // $params - viz první ukázka if (...) $as->logout();