Configurer un IdP pour eduGAIN

Documentation :

EduGAIN est un service d'interconnexion des fédérations éducation/recherche au niveau internationnal. Ce service est opéré par GEANT. EduGAIN fonctionne comme un agrégateur de méta-données. Aucune entité (SP ou IdP) ne s'inscrit directement dans eduGAIN, elle doit être inscrite dans une des fédérations nationales.

Chaque fédération publie un sous-ensemble de ses méta-données à destination d'eduGAIN. Pour la France, ce sous-ensemble comprend :

  • tous les IdPs membres de la Fédération Education-Recherche. Les administrateurs d'IdP souhaitant participer à eduGAIN doivent cocher la case eduGAIN depuis le guichet de la fédération ;
  • les SPs dont les administrateurs ont coché la case eduGAIN (principe de l'OPT-IN) sur le guichet de la fédération.

Les méta-données agrégées par eduGAIN sont ensuite publiées sur le site de chaque fédération et signées par celles-ci.

En tant qu'administrateur d'un IdP, eduGAIN permet à vos utilisateurs d'accéder à des services fédérés, proposés par un organisme étranger. Par exemple un chercheur de votre organisme appartenant à une communauté de chercheurs aura besoin de eduGAIN pour se connecter avec ses identifiants sur le site web de cette communauté.

Voici les étapes à mettre en oeuvre sur votre IdP pour permettre l'authentification dans le contexte eduGAIN :

  1. chargement des méta-données : vérifiez que vous chargez bien les méta-données main-sps-edugain-metadata.xml, voir plus loin ;
  2. prévoyez l'alimentation des attributs schacHomeOrganization et schacHomeOrganizationType non mentionnés dans les recommandations SupAnn. Voir les exemples de configuration décrite plus loin ;
  3. automatisez la diffusion des attributs utilisateurs aux SPs internationaux. Voir les exemples de configuration ci-dessous ;
  4. testez votre IdP en utilisant : eduGAIN Release check qui vous indiquera par ailleurs si les attributs transmis par votre IdP ont le bon format.

1. Modification de la configuration de l'IdP Shibboleth

1.1 Charger les méta-données eduGAIN

Nous vous recommandons de charger les deux fichiers de méta-données main-sps-edugain-metadata.xml et main-sps-renater-metadata.xml.

/opt/shibboleth-idp/conf/metadata-providers.xml
    <MetadataProvider id="RenaterProdMetadata"
                      xsi:type="FileBackedHTTPMetadataProvider"
                      backingFile="%{idp.home}/metadata/main-sps-renater-metadata.xml"
                      metadataURL="https://pub.federation.renater.fr/metadata/renater/main/main-sps-renater-metadata.xml"> 
 
        <MetadataFilter xsi:type="SignatureValidation"
            requireSignedMetadata="true"
            certificateFile="%{idp.home}/credentials/renater-metadata-signing-cert-2016.pem">
        </MetadataFilter>
        <MetadataFilter xsi:type="EntityRoleWhiteList">
            <RetainedRole>md:SPSSODescriptor</RetainedRole>
        </MetadataFilter>
 
    </MetadataProvider>
 
    <MetadataProvider id="RenaterEdugainMetadata"
                      xsi:type="FileBackedHTTPMetadataProvider"
                      backingFile="%{idp.home}/metadata/main-sps-edugain-metadata.xml"
                      metadataURL="https://pub.federation.renater.fr/metadata/edugain/main/main-sps-edugain-metadata.xml"> 
 
        <MetadataFilter xsi:type="SignatureValidation"
            requireSignedMetadata="true"
            certificateFile="%{idp.home}/credentials/renater-metadata-signing-cert-2016.pem">
        </MetadataFilter>
        <MetadataFilter xsi:type="EntityRoleWhiteList">
            <RetainedRole>md:SPSSODescriptor</RetainedRole>
        </MetadataFilter>
 
    </MetadataProvider>

1.2 Vérifier la liste des attributs diffusables dans le cadre de eduGAIN

Cette documentation décrit le jeu d'attributs utilisateurs minimal reconnu dans le cadre de eduGAIN.

1.3 Adapter attribute-resolver.xml

Le fichier attribute-resolver.xml définit tous les attributs diffusables par votre IdP et pour chacun la source de données associée. Dans le contexte eduGAIN, vous devez enrichir ce fichier pour prendre en compte les attributs schacHomeOrganization et schacHomeOrganizationType non prévus dans le schéma d'annuaire supann 2009.

Dans la plupart des cas les valeurs de ces deux attributs seront constantes pour tous vos utilisateurs ; vous pouvez donc les définir au moyen d'un DataConnector de type Static comme dans l'exemple ci-dessous.

    <!-- schacHomeOrganization -->
    <AttributeDefinition id="schacHomeOrganization" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:ad" sourceAttributeID="schacHomeOrganization">
 
      <!-- dépend de l'attribut statique schacHomeOrganization -->
      <Dependency ref="staticSchacHomeOrganization" />
 
      <AttributeEncoder xsi:type="SAML1String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:mace:terena.org:schac:schacHomeOrganization"/>
      <AttributeEncoder xsi:type="SAML2String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:oid:1.3.6.1.4.1.25178.1.2.9" friendlyName="schacHomeOrganization"/>
 
    </AttributeDefinition>
 
    <!-- schacHomeOrganizationType -->
    <AttributeDefinition id="schacHomeOrganizationType" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:ad" sourceAttributeID="schacHomeOrganizationType">
 
      <!-- dépend de l'attribut statique schacHomeOrganizationType -->
      <Dependency ref="staticSchacHomeOrganizationType" />
 
      <AttributeEncoder xsi:type="SAML1String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:mace:terena.org:schac:schacHomeOrganizationType"/>
      <AttributeEncoder xsi:type="SAML2String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:oid:1.3.6.1.4.1.25178.1.2.10" friendlyName="schacHomeOrganizationType"/>
 
    </AttributeDefinition>
 
    <!-- Static Connector -->
    <DataConnector id="staticSchacHomeOrganization" xsi:type="Static" xmlns="urn:mace:shibboleth:2.0:dc">
      <Attribute id="schacHomeOrganization">
	       <Value>univ-xx.fr</Value>
      </Attribute>
    </DataConnector>
 
    <!-- Static Connector -->
    <DataConnector id="staticSchacHomeOrganizationType" xsi:type="Static" xmlns="urn:mace:shibboleth:2.0:dc">
      <Attribute id="schacHomeOrganizationType">
	<Value>urn:schac:homeOrganizationType:int:university</Value>
      </Attribute>
    </DataConnector>

Après prise en compte de cette modification de configuration, vous pouvez vérifier que votre IdP est capable de fournir ces deux nouveaux attributs en vous connectant au fournisseur de service de test et validation RENATER.

1.4 Adapter attribute-filter.xml

Le fichier attribute-filter.xml vous permet de définir pour chaque SP, quels attributs utilisateurs seront transmis par votre IdP à l'issue de la phase d'authentification.

Au niveau de la Fédération Éducation-Recherche, RENATER les attributs attendus para chaque SP sont publiés directement dans les méta-données, à partir des informations déclarées par chaque administrateur de SP dans le guichet de la fédération.

A l'échelle d'eduGAIN les informations concernant les attributs attendus par chaque SP sont publiées directement dans les méta-données eduGAIN. Ci-dessous une illustration avec un extrait des méta-données eduGAIN :

<md:AttributeConsumingService index="1">
 <md:ServiceName xml:lang="en">IGI Grid Portal provided by INFN</md:ServiceName>
 <md:ServiceDescription xml:lang="en">IGI is the Italian Grid infrastructure, run for the benefit of the research and education communities in Italy and worldwide</md:ServiceDescription>
 <md:RequestedAttribute FriendlyName="eduPersonTargetedID" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
 <md:RequestedAttribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
 <md:RequestedAttribute FriendlyName="sn" Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
 <md:RequestedAttribute FriendlyName="mail" Name="urn:oid:0.9.2342.19200300.100.1.3" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" isRequired="true"/>
 <md:RequestedAttribute FriendlyName="eduPersonOrgDN" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.3" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
 <md:RequestedAttribute FriendlyName="localityName" Name="urn:oid:2.5.4.7" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>
</md:AttributeConsumingService>

Ces informations dans les méta-données sont exploitables pour configurer la diffusion automatique de certains attributs par votre IdP Shibboleth, en fonction des attributs demandés par des SPs.

Automatiser la diffusion d'attributs avec un IdP Shibboleth 3.x/4.x

Documentation :

La version 2.4.0 de l'IdP Shibboleth introduit une nouvelle règle PermitValueRule de type AttributeInMetadata utilisable dans votre fichier de configuration attribute-filter.xml. Cette fonctionnalité vous permet, pour un ensemble de SPs, d'autoriser la diffusion d'un attribut, uniquement s'il est déclaré comme demandé par le SP dans les méta-données de la fédération (eduGAIN dans le cas présent). L'option onlyIfRequired permet par ailleurs de ne diffuser l'attribut que s'il est indiqué comme obligatoire.

Exemple 1 : diffusion du pool d'attribut eduGAIN, à l'exclusion des attributs optionnels

<!-- On fournit les attributs requis (utile contexte eduGAIN) -->
  <AttributeFilterPolicy id="releaseToEduGainSp">
 
    <PolicyRequirementRule xsi:type="AttributeRequesterInEntityGroup" groupID="https://federation.renater.fr/edugain/" />
 
    <AttributeRule attributeID="eduPersonPrincipalName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="displayName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="commonName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="email">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonScopedAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonTargetedID">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacHomeOrganization">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacHomeOrganizationType">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
 
  </AttributeFilterPolicy>

Exemple 2 : diffusion du pool d'attribut eduGAIN, pour un SP donné

  <AttributeFilterPolicy id="releaseToEduGainSp">
 
    <PolicyRequirementRule xsi:type="AttributeRequesterString" value="https://terena.org/sp" />
 
 
    <AttributeRule attributeID="eduPersonPrincipalName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="displayName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="commonName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="email">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonScopedAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonTargetedID">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacOrganization">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacOrganizationType">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
 
  </AttributeFilterPolicy>
Si votre version de l'IdP Shibboleth est trop ancienne (<2.4.0), vous devez configurer manuellement les règles de diffusion d'attributs pour chaque SP.

1.5 Le Code of Conduct eduGAIN

Cette documentation décrit le fonctionnement du Data Protection Code of Conduct de GEANT.

Vous pouvez configurer votre IdP Shibboleth pour fournir automatiquement les attributs requis aux SPs ayant déclaré leur conformité au Code of Conduct.

Un exemple de configuration du fichier attribute-filter.xml (IdP Shibboleth 3.x) :

  <AttributeFilterPolicy id="releaseToCocoEduGainSp">
 
    <PolicyRequirementRule xsi:type="basic:OR">  
    <basic:Rule  xsi:type="AttributeRequesterInEntityGroup" groupID="https://federation.renater.fr/edugain/" />
    <basic:Rule  xsi:type="AttributeRequesterEntityAttributeExactMatch"
        attributeName="http://macedir.org/entity-category"
        attributeValue="http://www.geant.net/uri/dataprotection-code-of-conduct/v1"/>
    </PolicyRequirementRule>
 
 
    <AttributeRule attributeID="eduPersonPrincipalName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="displayName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="commonName">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="email">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonScopedAffiliation">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="eduPersonTargetedID">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacHomeOrganization">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
    <AttributeRule attributeID="schacHomeOrganizationType">
     <PermitValueRule xsi:type="AttributeInMetadata" onlyIfRequired="true"/>
    </AttributeRule>
 
  </AttributeFilterPolicy>

2. Inscrire votre IdP dans eduGAIN

Pour inscrire votre IdP dans eduGAIN, vous devez l'activer en cochant la case eduGAIN depuis le guichet de la fédération.

2.1 Configuration pour un IdP ne participant pas à eduGAIN

Si vous n'avez pas coché la case eduGAIN depuis le guichet de la fédération, il est cohérent que vous ne configuriez pas le chargement des méta-données des SPs issus de eduGAIN.

Vous devez modifier la configuration de votre IdP pour charger uniquement les méta-données des SPs inscrit dans la Fédération Education-Recherche. Exemple de configuration pour un IdP Shibboleth (fichier de configuration relying-party.xml) :

<MetadataProvider type="Chaining">
  <!-- Méta-données de la Fédération Education-Recherche -->
  <MetadataProvider 
        id="RENATERMD" xsi:type="FileBackedHTTPMetadataProvider"
	metadataURL="https://pub.federation.renater.fr/metadata/renater/main/main-sps-renater-metadata.xml"
	backingFile="/opt/shibboleth-idp/metadata/sps-renater-metadata.xml">
  <MetadataFilter xsi:type="SignatureValidation" requireSignedRoot="true" certificateFile="%{idp.home}/credentials/renater-metadata-signing-cert-2016.pem"></MetadataFilter>
  </MetadataProvider>
</MetadataProvider>

3. Tester l'authentification

Plusieurs fédérations ont inscrit un SP de validation dans eduGAIN. Vous pouvez par exemple accéder à la page de test de l'interfédération de SWITCH qui vous indiquera par ailleurs si les attributs transmis par votre IdP ont le bon format. Ce service est proposé par SWITCH pour les IdP de leur communauté, certains attributs ne sont pas utilisés dans le cadre d'eduGAIN, notamment l'attribut “eduPersonUniqueId”, vous pouvez donc ignorer l'alerte concernant cet attribut: