SimpleSAMLphp, le couteau suisse de l’authentification

Lorsqu’on héberge de nombreux serveurs ou services Web, un problème se pose forcément un jour ou l’autre: la multiplication des pages d’authentification et des procédures de gestion des utilisateurs. Pour ne rien arranger, elles sont toutes indépendantes les unes des autres. Vous me direz qu’il est possible d’utiliser (par exemple) un annuaire LDAP ou un service authentification centralisé tel que OAuth, mais cela ne règle pas la corvée des authentifications multiples.

Une solution existe, elle s’appelle «SSO» (pour Single Sign On). De nombreuses implémentations libres existent: Shibboleth, Jasig CAS (liste non exhaustive). Ces dernières ont cependant un inconvénient de taille: elles s’appuient sur JAVA … or JAVA, c’est lourd … très lourd … et compliqué à maintenir.

Dans le domaine de l’authentification, il est essentiel de clarifier les choses.

L’authentification n’est qu’une étape, celle qui permet de s’assurer qu’un utilisateur a donné une preuve de son identité, en d’autres termes qu’il est bien connu du système. Le mécanisme le plus courant, celui que vous connaissez tous, est la saisie d’un identifiant et d’un mot de passe.

Mais l’authentification ne donne pas d’indication sur ce que l’utilisateur peut ou ne peut pas faire !

L’autorisation est une seconde étape: une fois authentifié, on cherche des informations qui permettent de savoir ce à quoi l’utilisateur a accès. Il s’agit, le plus souvent, de savoir à quels «groupes» appartient l’utilisateur.

Dans le monde du «SSO», on distingue deux rôles:

  • Le SP (Service Provider): le fournisseur de service est une application qui a besoin d’authentifier l’utilisateur (Authentification) et le plus souvent de déterminer ce à quoi il a accès (Autorisation).
  • L’IDP (Identity Provider): le fournisseur d’identité authentifie l’utilisateur (Authentification) et donne les informations qui permettent de savoir ce a quoi il a accès (Autorisation).

En cherchant un peu, je suis tombé sur le projet SimpleSAMLphp qui va bien au delà de mes espérances: comme son nom l’indique, il est écrit en PHP et supporte nativement les principaux mécanismes SSO:

  • SAML
  • Shibboleth

Mais sa structure est modulaire et d’autres fonctionnalités sont également disponibles:

  • CAS
  • ADFS
  • OAuth
  • OpenID
  • MemCookie

SimpleSAMLphp est capable d’utiliser de nombreuses sources de données telles que LDAP, SQL, fichiers plats type «htpasswd», interrogation d’un service d’authentification tiers …

Il est possible de combiner plusieurs mécanismes. Par exemple, une instance configurée à la fois en SP et en IDP:

  • la partie SP redirige sur un serveur CAS (ce dernier assure l’authentification),
  • puis interroge un annuaire LDAP (ce qui lui permet de récupérer des données de groupe),
  • la partie IDP pourra répondre à la demande d’authentification et d’autorisation SAML d’un SP.

SimpleSAMLphp peut, tout comme Shibboleth, remplir la fonction «WAYF» (Where Are You From): un formulaire permet d’indiquer à quel organisme on appartient pour être redirigé sur la page d’authentification de l’organisme auquel on appartient.

C’est le principe de la «fédération d’identité»: on mutualise un service entre plusieurs organismes mais on délègue l’authentification à chaque organisme partenaire !

Le logiciel est très bien documenté et de nombreux exemples sont fournis: authentification LDAP, SQL, Facebook, Google, LinkedIn, Windows Live, …

 

Les commentaires sont fermés