Déploiement à l'INRIA d'un Service Provider SAML avec Shibboleth2.
[Sommaire]
Objectifs
Les services (Web) fournis par la DSI qui exigent un contrôle d'accès peuvent s'appuyer sur la technologie SAML qui est mise en œuvre avec Shibboleth. Les services rendus par SAML sont principalement l'authentification unique (SSO) et la fédération d'identité (fédération RENATER).
Ce document est un guide pratique à l'usage des administrateurs d'applications Web de la DSI qui souhaitent intégrer la brique Shibboleth pour gérer les accès à leurs applications. Il prend comme exemple l'installation d'un Service Provider pour Apache sur Debian et peut être plus ou moins facilement adapté dans d'autres cas ou hors de la DSI. Il donne quelques cas d'usage pour régir les accès à des ressources protégées.
Vue d'ensemble
Dans Shibboleth, le Service Provider (SP) est une sorte de gardien des ressources; il est identifié par un ID (en l'occurrence une URL) qui -pour les applications de la DSI- est de la forme: http://ns.inria.fr/dsi/saml/sp/[nom de votre service]/; il est d'usage de déposer à cette URL un document qui décrit brièvement votre SP.
L'ensemble des ressources à protéger sont identifiées par une configuration Apache classique: Shibboleth ne s'occupe que de l'authentification et des droits d'accès.
Les étapes pour mettre en œuvre le service sont:
- installer les composants logiciels
- configurer le SP
- enregistrer le SP dans la fédération
- protéger les accès aux ressources
Note
ce service n'est pas encore protégé par Shibboleth
Dans ce qui suit, on prendra comme exemple l'intranet de l'INRIA:
- le service est accessible ici: http://www.inria.fr/interne/
- l'ID du SP associé est http://ns.inria.fr/dsi/saml/sp/intranet-inria/
Composants logiciels nécessaires
La ressource à protéger doit être accessible via HTTPS.
Pour déployer un Service Provider, il faut:
- un service shibd2 (en général un service par nom de domaine)
- un module apache shib2
apt-get install shibboleth-sp2-schemas libshibsp-dev apt-get install libshibsp-doc libapache2-mod-shib2 opensaml2-tools
Documentation Shibboleth2: SPProtectionConfig-Apache
Configuration du service shibd2
Dans: /etc/shibboleth/shibboleth2.xml:
Si nécessaire, changer le clockSkew s'il n'y a pas de service de synchronisation de l'horloge:
<SPConfig clockSkew="300">
(Pour ISAPI au cas où (serveur Web Microsoft):
<Site id="1" name="http://ns.inria.fr/dsi/saml/sp/intranet-inria/"/> </ISAPI> </InProcess>
)
Astuce
Quand le module Apache est activé et avant que le SP ne soit déclaré dans la fédération, il vaut mieux utiliser un chemin factice <Path name="fake-path" ...>.
On définit le vhost et le service prévu:
<Host name="www.inria.fr"> <Path name="interne" authType="shibboleth" requireSession="true"/> </Host> <ApplicationDefaults id="default" policyId="default" entityID="http://ns.inria.fr/dsi/saml/sp/intranet-inria/" homeURL="https://www.inria.fr/interne/" REMOTE_USER="mail eppn persistent-id targeted-id" signing="false" encryption="false" >
Commenter tous les SessionInitiator et ajouter (au choix) celui-ci pour utiliser le service WAYF (service permettant à l'utilisateur de sélectionner à quel membre de la fédération il appartient):
<SessionInitiator type="Chaining" Location="/DS" id="DS" isDefault="true" relayState="cookie"> <SessionInitiator type="SAML2" defaultACSIndex="1" acsByIndex="false" template="bindingTemplate.html"/> <SessionInitiator type="Shib1" defaultACSIndex="5"/> <SessionInitiator type="SAMLDS" URL="https://services-federation.renater.fr/validation/wayf"/> </SessionInitiator>
...ou celui-ci pour accéder directement au SSO de l'INRIA, dans le cas d'une application réservée à du personnel INRIA exclusivement (cas le plus général):
<SessionInitiator type="Chaining" Location="/Login" isDefault="true" id="Intranet" relayState="cookie" entityID="https://idp1.inria.fr/idp/shibboleth"> <SessionInitiator type="SAML2" defaultACSIndex="1" template="bindingTemplate.html"/> <SessionInitiator type="Shib1" defaultACSIndex="5"/> </SessionInitiator>
A propos du WAYF (Where Are You From): il n'est pas recommandé d'utiliser celui de la fédération; l'usage actuel est de déployer ce service au plus près du SP. Par ailleurs, les services WAYF ont tendance à être remplacés par des Discovery Services (DS). Pour finir, plusieurs SessionInitiator peuvent être déclarés, et celui utilisé peut-être précisé dans la conf Apache.
On définit les données de la fédération:
<MetadataProvider type="XML" uri="https://services-federation.renater.fr/metadata/renater-metadata.xml" backingFilePath="federation-metadata.xml" reloadInterval="7200"> <SignatureMetadataFilter certificate="/etc/shibboleth/metadata-federation-renater.crt"/> </MetadataProvider>
Voir https://federation.renater.fr/technique/metadata
Télécharger le certificat:
cd /etc/shibboleth/ wget https://services-federation.renater.fr/metadata/metadata-federation-renater.crt
On définit une paire de clé privée/publique SSL:
<CredentialResolver type="File" key="/etc/ssl/private/www.inria.fr.key" certificate="/etc/ssl/certs/www.inria.fr.pem"/>
On récupère les attributs de la fédération:
wget https://services-federation.renater.fr/exemples/conf_sp2_renater.tar.gz
On utilise uniquement les fichiers attribute-map.xml et attribute-policy.xml (remplacer les fichiers eponymes existants).
Avant de démarrer le daemon shibd, on vérifie la syntaxe:
Attention
Une erreur peut provoquer une indisponibilité d'Apache lorsque le module idoine est activé (voir ci-après).
/usr/sbin/shibd -tc /etc/shibboleth/shibboleth2.xml
Démarrer:
/etc/init.d/shibd start
Vérifier les logs:
/var/log/shibboleth/shibd.log
Configuration du module Apache shib2
Activer le module shib2:
a2enmod shib2
Résultat: /etc/apache2/mods-enabled/shib2.load -> /etc/apache2/mods-available/shib2.load
Note
Un valid-user est un utilisateur connu de la fédération; voir les autres cas de configuration.
Dans le virtualhost on active shibboleth sur une url (ou on utilise un .htaccess):
<Location /interne> AuthType shibboleth ShibRequireSession On require valid-user </Location>
Enregistrement du SP dans la fédération
Pour enregistrer le service dans la fédération, prenez connaissance du document de la fédération: https://federation.renater.fr/participants/declarer-sp. Puis déclarez la ressource ("gérer vos fournisseurs d'identités et vos ressources"). "Ajoutez une ressource": notez qu'à partir de cette interface vous aurez la possibilité de gérer ultérieurement vos ressources. Fournissez les informations demandées:
- Votre nom et mail
- Une description de la ressource, par exemple "Intranet INRIA au profit des personnels INRIA."
- Les attributs utilisateurs demandés par le service, par exemple: "eduPersonPrincipalName (identifiant institutionnel unique)"
- L'intitulé du service, par exemple "INRIA - Intranet"
- L'URL du service, par exemple "https://www.inria.fr/interne/"
- L'URL de vos méta données, par exemple "https://www.inria.fr/Shibboleth.sso/Metadata" (rendu disponible par l'activation du module Apache)
Note
Prenez soin d'utiliser un chemin factice dans la configuration de Shibboleth; une fois le SP validé, rétablissez la bonne valeur.
- Puis validez: un administrateur de la fédération rendra effective votre demande; chaque modification ultérieure devra être à nouveau validée.
Vérification du bon fonctionnement
Dans un répertoire protégé, copier le fichier shibenv.php; en y accédant, vous devriez être préalablement redirigé vers le WAYF puis le SSO (ou directement vers le SSO).
Les informations affichées peuvent être exploitées pour gérer finement les accès.
Autres éléments de configuration
A définir pour le service shibd2:
<Errors session="sessionError.html" metadata="metadataError.html" access="accessError.html" ssl="sslError.html" localLogout="localLogout.html" globalLogout="globalLogout.html" supportContact="webadmin@inria.fr" logoLocation="http://www.inria.fr/images/logo.gif" styleSheet=""/>
Documentation
- Module Apache
- Autre doc plus complète sur Shibboleth::SP
- Shibboleth Service Provider (SP) v2.3.x Installation on Debian Lenny
- Howto Install Shibboleth2 SP on Debian Lenny
Cas d'utilisations (configuration Apache)
Exemples de configurations .htaccess
- Accès réservé à tout membre de la fédération:
AuthType shibboleth ShibRequireSession On require valid-user
- Accès réservé à tout membre de l'INRIA:
AuthType shibboleth ShibRequireSession On require supannEtablissement ~ ^\{INRIA\}\d*$
- Accès réservé à tout membre d'un groupe:
Note
Les utilisateurs nommés dans les groupes et les listes sont définis par leur mail car c'est ce qui est spécifié dans la configuration (voir REMOTE_USER).
AuthType shibboleth ShibRequireSession On AuthGroupFile /path/to/.htgroup require group ceuxQuiOntLeDroit
.htgroup:
ceuxQuiOntLeDroit: john.doe@sophia.inria.fr jane.doe@sophia.inria.fr
- Accès réservé à une liste d'utilisateurs:
AuthType shibboleth ShibRequireSession On require user john.doe@sophia.inria.fr jane.doe@sophia.inria.fr
- Accès réservé à un CR INRIA:
AuthType shibboleth ShibRequireSession On require ou UR-Sophia
- Accès réservé à une catégorie de personnel de la fédération:
En utilisant d'autres attributs de la fédération.
- Accès réservé à une catégorie de personnel de l'INRIA:
En utilisant d'autres attributs que l'IDP INRIA doit propager. Contacter les administrateurs de l'IDP INRIA: [mi.et.authentification [at] sophia · inria · fr].
Attributs publiés
Les attributs publiés par l'IDP et reçus par les SP peuvent être exploités pour régir les droits d'accès; la plupart sont publiques, mais certains peuvent être spécifiques à un SP (contacter les administrateurs de l'IDP INRIA).
Ils sont accessibles depuis la fédération RENATER; sélectionner la ressource: RENATER - ressource de validation de la fédération Education-Recherche (Shibboleth v2):
Miscellaneous Client Address: 138.96.193.182 Identity Provider: https://idp1.inria.fr/idp/shibboleth SSO Protocol: urn:oasis:names:tc:SAML:2.0:protocol Authentication Time: 2010-06-28T12:46:31.093Z Authentication Context Class: urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified Authentication Context Decl: (none) Session Expiration (barring inactivity): 480 minute(s) Attributes cn: POULARD Philippe mail: Philippe.Poulard@sophia.inria.fr ou: UR-Sophia sn: POULARD supannEtablissement: {INRIA}04 uid: ppoul00F
Author: [philippe.poulard [at] sophia · inria · fr]