La relation bilatérale SP-IDP

Il n'est pas nécessaire de faire partie d'une fédération (cercle de confiance) pour utiliser le logiciel Shibboleth. Si vous disposez d'un fournisseur de services (SP) et d'un fournisseur d'identités (IdP), vous pouvez définir une confiance mutuelle entre ces deux briques. Dans ce cas la brique WAYF n'est pas utilisée puisque le fournisseur de services connait un seul fournisseur d'identités.
Cela est particulièrement adapté pour des applications locales à l'établissement, compatibles SAML, qui n'ont pas à être partagées avec la communauté.
SAML reposant sur la confiance mutuelle entre les entités (IDP et SP), l'établissement de la relation de confiance ne se fait plus via la fédération et le guichet, mais via l'échange direct des méta-données entre l'IDP et le SP.

1. Configuration du SP 3.x

Pour configurer une relation bilatérale sur un SP, il faut paramétrer :

  • La confiance dans les méta-données de l'IDP
  • La redirection directe vers l'IDP, sans passer pas un DS/WAYF
Dans le cas d'un SP qui était déclaré dans la fédération, alors qu'il n'a qu'un usage local, il faut bien penser à effectuer les 2 opérations. En effet, diriger les utilisateurs directement vers l'IDP sans passer par le WAYF, mais en conservant le téléchargement des méta-données de la fédération ouvre une brèche dans la sécurité du SP. Il est dans ce cas tout à fait possible de forger une URL d'accès au SP, lui indiquant d'utiliser un autre IdP que celui par défaut qui est configuré, autorisant de fait d'autres IDP que celui configuré.

1.1 Confiance dans les méta-données

Vous devez tout d'abord ajouter la confiance dans les méta-données de l'IdP. Vous pouvez utiliser celles qui ont été générées automatiquement lors de l'installation, contenues dans le fichier /opt/shibboleth-idp/metadata/idp-metadata.xml, et exposées via l'URL https://monidp.univ-test.fr/idp/shibboleth, mais attention: comme l'indique explicitement le commentaire en début du fichier, il s'agit d'un fichier statique d'exemple. Si vous avez modifié des paramétrages après l'installation (changement de l'entityID, du certificat ou des URLs), il faut également penser à le mettre à jour. Et surtout, il comporte une date limite de validité, correspondant à la date et l'heure d'installation, indiquée par l'attribut validUntil de l'élément racine EntityDescriptor. Il faut soit prolonger cette date, soit plus simplement supprimer l'attribut.

Vous pouvez donc configurer le fichier shibboleth2.xml de votre SP ainsi :

/etc/shibboleth/shibboleth2.xml
  <MetadataProvider type="XML" url="https://monidp.univ-test.fr/idp/shibboleth"
    backingFilePath="/etc/shibboleth/monidp-metadata.xml" reloadInterval="7200">
  </MetadataProvider>
Si vous utilisez Shibboleth SP 2, le paramètre url s'appelle uri

1.2 Le session initiator

Par défaut, le session initiator de votre SP Shibboleth utilise un WAYF. Dans notre cas c'est superflu car le seul IdP reconnu est https://monidp.univ-test.fr/idp. Modifiez le fichier de configuration shibboleth2.xml de votre SP comme suit :

/etc/shibboleth/shibboleth2.xml
<!-- On ne connait qu'un seul IdP : https://monidp.univ-test.fr/idp -->
  <SSO entityID="https://monidp.univ-test.fr/idp/shibboleth">
    SAML2 SAML1
  </SSO>

L'attribut defaultACSIndex fait référence à un élément AssertionConsumerService dont l'index est 1 (par défaut le binding urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST).

2. Configuration de l'IdP 3.x

Dans le cadre d'une relation bilatérale, votre IdP doit faire confiance à un SP. Pour ce faire, il doit connaitre les méta-données du SP. Le SP Shibboleth expose ses méta-données de manière dynamique via l'adresse https://monsp.univ-test.fr/Shibboleth.sso/Metadata.

2.1 Shibboleth IDP 3.x

Editez le fichier metadata-providers.xml comme suit :

/opt/shibboleth-idp/conf/metadata-providers.xml
 <MetadataProvider id="fedadeuxMD" xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
    metadataURL="https://monsp.univ-test.fr/Shibboleth.sso/Metadata"
    backingFile="/opt/shibboleth-idp/metadata/fedadeux-metadata.xml">
 </MetadataProvider>