Mettre en œuvre eduGAIN pour un IdP

1. Modification de la configuration de l'IdP Shibboleth

A compter du 1er juillet 2014 tous les IdPs membres de la Fédération Education-Recherche sont automatiquement publiés au niveau de eduGAIN. Si vous souhaitez ne pas publier les méta-données de votre IdP dans eduGAIN, reportez-vous au chapitre décrivant la configuration pour l'OPT-OUT plus bas dans ce document.

A compter de cette date les SPs eduGAIN sont inclus dans les fichier de méta-données main-sps-edugain-metadata.xml. Vous pouvez donc garder la configuration de votre IdP relative au chargement des méta-données pour fonctionner dans le contexte eduGAIN. Cependant nous vous suggérons ci-dessous une configuration à la fois plus explicite et optimale puisqu'elle permet de ne charger que les méta-données des SPs RENATER et eduGAIN (pas celles des IdPs).

En revanche, votre IdP doit être configuré pour accepter la diffusion des attributs requis pour chaque SP international. Vous trouverez ci-dessous des exemples de configuration pour un IdP Shibboleth. Si vous utilisez une autre implémentation logicielle, vous devrez adapter ces recommandations à votre contexte.

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.

1.2 Configuration pour un IdP 2.x

/opt/shibboleth-idp/conf/relying-party.xml
	<!-- Metadonnées de la fédération Éducation Recherche -->
        <MetadataProvider id="renaterMD" xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata" 
                          metadataURL="https://metadata.federation.renater.fr/renater/main/main-sps-renater-metadata.xml"
                          backingFile="/opt/shibboleth-idp/metadata/main-sps-renater-metadata.xml">
            <MetadataFilter xsi:type="ChainingFilter" xmlns="urn:mace:shibboleth:2.0:metadata">
                <MetadataFilter xsi:type="RequiredValidUntil" xmlns="urn:mace:shibboleth:2.0:metadata" 
                                maxValidityInterval="0" />
                <MetadataFilter xsi:type="SignatureValidation" xmlns="urn:mace:shibboleth:2.0:metadata"
                                trustEngineRef="shibboleth.MetadataTrustEngine"
                                requireSignedMetadata="true" />
	            <MetadataFilter xsi:type="EntityRoleWhiteList" xmlns="urn:mace:shibboleth:2.0:metadata">
                    <RetainedRole>samlmd:SPSSODescriptor</RetainedRole>
                </MetadataFilter>
            </MetadataFilter>
        </MetadataProvider>
 
	<!-- Metadonnées de eduGAIN -->
        <MetadataProvider id="edugainMD" xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata" 
                          metadataURL="https://metadata.federation.renater.fr/edugain/main/main-sps-edugain-metadata.xml"
                          backingFile="/opt/shibboleth-idp/metadata/main-sps-edugain-metadata.xml">
            <MetadataFilter xsi:type="ChainingFilter" xmlns="urn:mace:shibboleth:2.0:metadata">
                <MetadataFilter xsi:type="RequiredValidUntil" xmlns="urn:mace:shibboleth:2.0:metadata" 
                                maxValidityInterval="0" />
                <MetadataFilter xsi:type="SignatureValidation" xmlns="urn:mace:shibboleth:2.0:metadata"
                                trustEngineRef="shibboleth.MetadataTrustEngine"
                                requireSignedMetadata="true" />
	            <MetadataFilter xsi:type="EntityRoleWhiteList" xmlns="urn:mace:shibboleth:2.0:metadata">
                    <RetainedRole>samlmd:SPSSODescriptor</RetainedRole>
                </MetadataFilter>
            </MetadataFilter>
        </MetadataProvider>
 
         <!-- Trust engine used to evaluate the signature on loaded metadata. -->
<security:TrustEngine id="shibboleth.MetadataTrustEngine"       xsi:type="security:StaticExplicitKeySignature">
  <security:Credential id="TestCredentials" xsi:type="security:X509Filesystem">
    <security:Certificate>/opt/shibboleth-idp/credentials/renater-metadata-signing-cert-2016.pem</security:Certificate>
    </security:Credential>
  </security:TrustEngine> 

1.3 Configuration pour un IdP 3.x

/opt/shibboleth-idp/conf/metadata-providers.xml
    <MetadataProvider id="RenaterProdMetadata"
                      xsi:type="FileBackedHTTPMetadataProvider"
                      backingFile="%{idp.home}/metadata/main-sps-renater-metadata.xml"
                      metadataURL="https://metadata.federation.renater.fr/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://metadata.federation.renater.fr/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.4 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.5 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 -->
    <resolver:AttributeDefinition id="schacHomeOrganization" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad" sourceAttributeID="schacHomeOrganization">
 
      <!-- dépend de l'attribut statique schacHomeOrganization -->
      <resolver:Dependency ref="staticSchacHomeOrganization" />
 
      <resolver:AttributeEncoder xsi:type="SAML1String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:mace:terena.org:schac:schacHomeOrganization"/>
      <resolver: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"/>
 
    </resolver:AttributeDefinition>
 
    <!-- schacHomeOrganizationType -->
    <resolver:AttributeDefinition id="schacHomeOrganizationType" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad" sourceAttributeID="schacHomeOrganizationType">
 
      <!-- dépend de l'attribut statique schacHomeOrganizationType -->
      <resolver:Dependency ref="staticSchacHomeOrganizationType" />
 
      <resolver:AttributeEncoder xsi:type="SAML1String"  xmlns="urn:mace:shibboleth:2.0:attribute:encoder" name="urn:mace:terena.org:schac:schacHomeOrganizationType"/>
      <resolver: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"/>
 
    </resolver:AttributeDefinition>
 
    <!-- Static Connector -->
    <resolver:DataConnector id="staticSchacHomeOrganization" xsi:type="Static" xmlns="urn:mace:shibboleth:2.0:resolver:dc">
      <Attribute id="schacHomeOrganization">
	<Value>univ-xx.fr</Value>
      </Attribute>
    </resolver:DataConnector>
 
    <!-- Static Connector -->
    <resolver:DataConnector id="staticSchacHomeOrganizationType" xsi:type="Static" xmlns="urn:mace:shibboleth:2.0:resolver:dc">
      <Attribute id="schacHomeOrganizationType">
	<Value>urn:schac:homeOrganizationType:int:university</Value>
      </Attribute>
    </resolver: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 auprès de la ressource de validation de RENATER .

1.6 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 Education-Recherche, RENATER met à disposition des filtres d'attributs générés automatiquement à partir des informations déclarées par chaque administrateur de SP dans le guichet de la fédération. L'utilisation du filtre d'attribut renater-attribute-filters-national.xml (concernant les applications nationales) a été rendu obligatoire dans le cadre technique de la fédération.

A l'échelle d'eduGAIN les informations concernant les attributs attendus par chaque SP cont 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 eduGAIN.

1.6.0.1 Option A : automatiser la diffusion d'attributs avec un IdP Shibboleth 2.4.0

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) -->
  <afp:AttributeFilterPolicy id="releaseToEduGainSp">
 
    <afp:PolicyRequirementRule xsi:type="saml:AttributeRequesterInEntityGroup" groupID="https://federation.renater.fr/edugain/" />
 
    <afp:AttributeRule attributeID="eduPersonPrincipalName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="displayName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="commonName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="email">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonAffiliation">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonScopedAffiliation">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonTargetedID">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="schacHomeOrganization">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="schacHomeOrganizationType">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
 
  </afp:AttributeFilterPolicy>

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

  <afp:AttributeFilterPolicy id="releaseToEduGainSp">
 
    <afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://terena.org/sp" />
 
 
    <afp:AttributeRule attributeID="eduPersonPrincipalName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="displayName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="commonName">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="email">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonAffiliation">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonScopedAffiliation">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="eduPersonTargetedID">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="schacOrganization">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
    <afp:AttributeRule attributeID="schacOrganizationType">
     <afp:PermitValueRule xsi:type="saml:AttributeInMetadata" onlyIfRequired="true"/>
    </afp:AttributeRule>
 
 
  </afp: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. A terme RENATER vous fournira un filtre d'attributs généré automatiquement à partir des informations publiées par les SPs eduGAIN dans les méta-données.

1.6.0.2 Option B : Utiliser un filtre d'attribut automatique fourni par RENATER

L'option (A) présentée ci-dessus est celle qui vous offre le plus de flexibilité quant au filtrage des attributs pour eduGAIN ; vous pouvez notamment tenir compte de la conformité au Code of Conduct eduGAIN, lire plus bas.

SI vous ne disposez pas d'une version récente (> 2.4.0) de l'IdP Shibboleth, vous pouvez utiliser un filtre d'attribut mis à disposition par RENATER. Ce filtre d'attributs inclut les règles de diffusion d'attributs requis pour tous les SPs internationaux publiés dans eduGAIN.

Exemple de paramétrage avec les filtres automatiques pour la Fédération Education-Recherche et eduGAIN ; fichier de configuration service.xml (pour un IdP Shibboleth) :

<srv:Service id="shibboleth.AttributeFilterEngine"
	     configurationResourcePollingFrequency="PT6H"
	     configurationResourcePollingRetryAttempts="3"
             xsi:type="attribute-afp:ShibbolethAttributeFilteringEngine">
    <srv:ConfigurationResource url="https://federation.renater.fr/renater/filtres/renater-attribute-filters-all.xml" xsi:type="resource:FileBackedHttpResource" file="/opt/shibboleth-idp/conf/renater-attribute-filters-all.xml"/> 
    <srv:ConfigurationResource url="https://federation.renater.fr/edugain/filtres/edugain-attribute-filters-all.xml" xsi:type="resource:FileBackedHttpResource" file="/opt/shibboleth-idp/conf/edugain-attribute-filters-all.xml"/>
    <srv:ConfigurationResource file="/opt/shibboleth-idp/conf/attribute-filter.xml" xsi:type="resource:FilesystemResource" />
</srv:Service>

1.7 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 2.4.0) :

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

2. Inscrire votre IdP dans eduGAIN

Tous les IdPs inscrits dans la Fédération Education-Recherche sont publiés auprès de eduGAIN. Vous avez cependant la possibilité de désactiver cette publication (principe de l'OPT-OUT) en décochant la case eduGAIN depuis le guichet de la fédération.

2.1 Configuration pour un IdP ne participant pas à eduGAIN

Si vous avez dé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. En effet à compter du 1er juillet 2014, les SPs eduGAIN seront inclus dans le fichier de méta-données de la Fédération Education-Recherche.

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 -->
  <metadata:MetadataProvider 
        id="RENATERMD" xsi:type="metadata:FileBackedHTTPMetadataProvider"
	metadataURL="https://federation.renater.fr/renater/sps-renater-metadata.xml"
	backingFile="/opt/shibboleth-idp/metadata/sps-renater-metadata.xml">
	<metadata:MetadataFilter xsi:type="metadata:ChainingFilter">
	  <metadata:MetadataFilter xsi:type="metadata:RequiredValidUntil" 
				   maxValidityInterval="P7D" />
	  <metadata:MetadataFilter xsi:type="metadata:SignatureValidation"
				   trustEngineRef="shibboleth.MetadataTrustEngine"
				   requireSignedMetadata="true" />
	  <metadata:MetadataFilter xsi:type="metadata:EntityRoleWhiteList">
	    <metadata:RetainedRole>samlmd:SPSSODescriptor</metadata:RetainedRole>
	  </metadata:MetadataFilter>
	</metadata:MetadataFilter>
   </metadata:MetadataProvider>
 
</MetadataProvider>

3. Tester l'authentification

Plusieurs fédérations ont inscrit un SP de validation dans eduGAIN. Vous pouvez par exemple utiliser le service proposé par GEANT pour visualiser les attributes envoyés aux services d'eduGAIN, à eduGAIN Release check qui vous indiquera par ailleurs si les attributs transmis par votre IdP ont le bon format.

Vous pouvez accéder au wiki eduGAIN pour connaître la liste des attributs recommandés.