logo INRIA

-----------------------
SAML Service Provider - Documentation
-----------------------

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:

  1. installer les composants logiciels
  2. configurer le SP
  3. enregistrer le SP dans la fédération
  4. 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:

Composants logiciels nécessaires

La ressource à protéger doit être accessible via HTTPS.

Pour déployer un Service Provider, il faut:

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:

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

Cas d'utilisations (configuration Apache)

Exemples de configurations .htaccess

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: []