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.
Instalace SimpleSAMLphp
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.
Konfigurace SP
základní nastavení
soubor config/config.php'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',
vygenerování certifikátu
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
autentizační body
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',
],
],
];
zjištění metadat SP
- V administraci simplesaml, záložka federace (https://<server>.fit.vutbr.cz/simplesaml/module.php/admin/federation)
- Hosted entities -> SAML 2.0 SP Metadata -> rozbalit
- Předat odkaz správci IdP (Marek Kuchynka). Odkaz bude vypadat asi takto: https://<server>.fit.vutbr.cz/simplesaml/module.php/saml/sp/metadata.php/default
uložení metadat IdP
metadata získáte od správce formou odkazu na XML soubor
- v nástroji pro konverzi (dole v administraci https://<server>.fit.vutbr.cz/simplesaml/module.php/admin/federation) získáte metadata ve formátu PHP pole
- soubor metadata/saml20-idp-remote.php
- přidat získaná metadata od správce IdP jako záznam v poli $metadata indexovaný IdP entityID
Použití autentizace
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í:
- Přilinkovat třídy SimpleSAMLphp pomocí autoloaderu
- Na místě, které vyžaduje autentizovaného uživatele, zajistit přihlášení
- Získat data přihlášeného uživatele
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();