Plugin SAML2 pour Laravel, utilisation pour ALEX et GARDIAN. Ce plugin est basé sur la librairie LightSaml pour PHP : https://www.lightsaml.com/
Dans composer.json du projet Laravel, ajouter le repository :
"repositories": [
{
"type": "vcs",
"url": "https://github.com/DaVikingCode/laravel-saml2.git"
}
],
Puis faire le require pour lancer l'installation du plugin :
$ composer require davikingcode/laravel-saml2
Pour les versions antérieures à Laravel 6.0, utiliser la version 1.0.0 du plugin.
Se référen à la documentation ALEX ou GARDIAN, puis ajouter au fichier .env les variables suivantes.
SAML2_MODE=alex // mode du pugin : "alex" ou "gardian"
APP_NNA= // le numéro NNA de l'application
SAML2_INTERNE_DOMAIN=enedis.fr,enedis-grdf.fr // une liste de noms de domaines considérés comme "internes"
ALEX :
SAML2_LOGOUT_URL_PROD= // url de logout de prod
SAML2_LOGOUT_URL_DEV= // url de logout de dev
SAML2_LOGIN_URL_PROD= // url de login de prod
SAML2_LOGIN_URL_DEV= // url de login de dev
GARDIAN :
GARDIAN_LOGOUT_URL_PROD= // url de logout de prod
GARDIAN_LOGOUT_URL_DEV= // url de logout de dev
GARDIAN_LOGIN_URL_PROD= // url de login de prod
GARDIAN_LOGIN_URL_DEV= // url de login de dev
Utiliser OpenSSL pour créer créer le certificat et la clé publique :
$ openssl req -new -x509 -days 3650 -nodes -sha256 -out saml.crt -keyout saml.pem
Renommer les fichiers créés "sp.crt" et sp.pem", et les placer dans le dossier "storage/saml2/".
3650 days = clé valable 10 ans. Plus d'information sur la création de la paire ici : https://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-generate-key-pair/
Le plugin installe automatiquement les routes suivante :
| | POST | saml2/acs | saml2-acs | DaVikingCode\LaravelSaml2\Controllers\LaravelSaml2Controller@acs | web |
| | GET|HEAD | saml2/login | saml2-login | DaVikingCode\LaravelSaml2\Controllers\LaravelSaml2Controller@login | web |
| | GET|HEAD | saml2/logout | saml2-logout | DaVikingCode\LaravelSaml2\Controllers\LaravelSaml2Controller@logout | web |
| | GET|HEAD | saml2/metadata | saml2-metadata | DaVikingCode\LaravelSaml2\Controllers\LaravelSaml2Controller@getMetadata | web |
Aller sur l'url "saml2/metadata" pour accéder au XML, l'enregistrer et le fournir à l'équipe ALEX ou GARDIAN.
L'équipe ALEX ou GARDIAN fournit une clé publique. La renommer "idp.crt" et la placer dans le dossier "storage/saml2".
Cette clé servira à contrôler la signature de la réponse SAML2.
Si besoin de modifier la configuration du plugin, la publier :
php artisan vendor:publish --tag=laravelsaml2.config
Le fichier de config sera publié dans "config/laravelsaml2.php', il peut ensuite être modifier.
- Aller sur l'URL "saml2/login" pour être redirigé vers le portail de connexion ALEX ou GARDIAN.
- Une fois l'utilisateur authentifié sur le portail, on est redirigé sur l'url "saml2/acs" en POST.
- La signature SAML2 est vérifiée, et des informations de connexion sont récupérées.
- La fonction de login de l'application est appelée dans le UserController.
Défini dans la configuration, le controller par défaut est "App\Http\Controllers\Api\UserController".
La fonction concernée est "logUserIn($attributes)" et prend en paramètre un tableau, qui contient les attributs SAML2 reçus.
Le reste de cette fonction est propre à chaque application, et dépend de la gestion des utilisateurs prévus.
Pour toute information concernant SAML2, se référer à la documentation LightSaml : https://www.lightsaml.com/
Pour toute information propre à ALEX ou GARDIAN, ou pour toute information complémentaire, se référer à la documention ou à l'équipe ALEX ou GARDIAN.