Cette page est en cours d'écriture, de nombreuses fautes et informations non complètes sont encore présentes !
L'authentification fédérée avec Shibboleth permet d'ouvrir la connexion à votre instance de Pod à toutes personnes possédant un compte dans une fédération Shibboleth. Comme par exemple la Fédération Education - Recherche de Renater.
Installation d'un SP (Service Provider) Shibboleth
Afin de pouvoir mettre en place l'authentification avec Shibboleth, il est nécessaire d'installer un Service Provider. Chaque application "Shibbolétisée" doit posséder son propre SP.
Pour installer un SP Shibboleth, vous pouvez suivre les différentes documentations :
- https://services.renater.fr/federation/documentation/guides-installation/sp3/chap01 (Tutoriel de Renater pour installer un SP en version 3, en Français)
- https://wiki.shibboleth.net/confluence/display/SP3/Installation (Installation par le Wiki de Shibboleth en Anglais)
Information
Configuration du Serveur Web
Shibboleth étant prévu pour fonctionner avec Apache2, il s'agit de la méthode recommandée pour le faire fonctionner. Néanmoins, étant donné que Podv2 utilise Nginx avec Uwsgi pour fonctionner, il est nécessaire d'apportes quelques changements dans la configuration.
Le but final est d'avoir un serveur Apache2 en frontal qui (grâce au mod_shib) communiquera avec Shibboleth et fournira des routes de connexion / déconnexion au service d'authentification. Ce dernier permettra également d'accéder à l'application par l'utilisation d'un ReverseProxy.
A noter
Il s'agit seulement d'une façon de faire, vous n'êtes pas obligé de mettre en place la communication entre Shibboleth et votre application de cette manière. Vous pouvez par exemple installer Shibboleth coté Nginx ou encore faire tourner votre instance de pod en utilisant le mod_wsgi de Apache et donc sans aucune utilisation de Nginx. Néanmoins, ces méthodes n'ont pas été testées et sont plus compliquées à mettre en place, libre à vous d'utiliser celle qui vous convient les mieux selon vos besoins.
Etape 1 : Configuration de Nginx
Dans un premier temps, il est nécessaire de changer le port sur lequel Nginx fonctionne (puisqu'on veut que Apache soit frontal)
Dans le bloc server du fichier pod_nginx.conf il faut donc changer le port d'écoute. Dans cet exemple, le port 8080 a été choisi mais libre à vous d'en choisir un autre.
server{
listen 8080;
...
}
Etape 2 : Configuration de Apache2
Coté apache (ou httpd), il faut configurer un VirtualHost (ou en modifiant le VirtualHost de base comme dans l'exemple ci-dessous) ou configurer le httpd.conf si vous utilisez un serveur httpd.
Information
Selon que vous vous utilisez http ou la version complète d'apache, pensez à charger les modules mod_shib, mod_ssl (si besoin), mod_proxy et mod_proxy_http pour que l'ensemble des directions ce dessous fonctionnent
Dans l'exemple ci-dessous, l'application pod sera accessible à partir de la route / et toutes les routes relations à Shibboleth seront accessibles par /shib
- Pour l'accès à Pod :
<Location />
ProxyPass https://127.0.0.1:8080/
ProxyPassReverse http://127.0.0.1:8080/
AuthType shibboleth
Require shibboleth
ShibUseHeaders On
</Location>
- Pour l'accès aux routes Shibboleth :
<Location /shib/secure>
ProxyPass !
AuthType shibboleth
ShibRequestSetting requireSession 1
Require shib-session
</Location>
<Location /shib/Shibboleth.sso>
ProxyPass !
SetHandler shib
</Location>
Information
Si vous devez utiliser mod_ssl avec des échanges en HTTPS vous devrez peut être utilisées ces options en complément :
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyRequests Off
ProxyPreserveHost On
Etape 3 : Configuration de Pod
Pour prendre en charge l'authentification avec Shibboleth dans 3, il faut paramétrer 5 settings.
USE_SHIB=True #Active l'authentification Shibboleth dans la page de connexion
SHIB_NAME = "Fédération de Test" #Précise le nom de la fédération d'identité qui sera affichée sur le bouton de connexion
SHIBBOLETH_ATTRIBUTE_MAP = {
"HTTP_REMOTE_USER": (True, "username"),
"HTTP_DISPLAYNAME": (True, "first_name"),
"HTTP_DISPLAYNAME": (True, "last_name"),
"HTTP_MAIL": (False, "email"),
} # Permet de préciser le mapping entre les attributs transmis par shibboleth et les attributs de la classe utilisateur
REMOTE_USER_HEADER = "REMOTE_USER" #Nom d'entête qui permet d'identifier l'utilisateur connecté par Shibboleth, vaut HTTP_REMOTE_USER si on utilise un ReverseProxy avec Apache
SHIB_URL="https://univ-lr.fr/shib/Shibboleth.sso/Login" #Lien de connexion à Shibboleth
SHIB_LOGOUT_URL = "https://univ-lr.fr/shib/Shibboleth.sso/Logout" #Lien de dé-connexion à Shibboleth
Pensez également à ajouter l'authentification Shibboleth à l'attribut AUTH_TYPE :
AUTH_TYPE = (('local', ('local')), ('CAS', 'CAS'), ('Shibboleth','Shibboleth'))