I. Qu'est ce qu'OpenID ?

OpenID est un système d’authentification décentralisé qui permet l’authentification unique, ainsi que le partage d’attributs. Il permet à un utilisateur de s’authentifier auprès de plusieurs sites (devant prendre en charge cette technologie) sans avoir à retenir un identifiant pour chacun d’eux mais en utilisant à chaque fois un unique identifiant OpenID.
Wikipedia

Concrètement, en général, quand vous souhaitez vous inscrire sur un site, vous devez :

  • remplir un formulaire avec plus ou moins de données vous concernant (pseudo, nom, prénom, mail, age, etc.)
  • valider votre demande et attendre un mail de confirmation
  • aller sur votre boite mail pour cliquer sur un lien d'activation

Ce processus est à répéter sur chaque nouveau site, à chaque nouvelle inscription. Outre le fait que ce soit assez rébarbatif, on fini par ne plus s'y retrouver avec toutes ces identités ("quel pseudo j'ai choisi pour ce site, quel mot de passe, etc.").

De plus, problème récurent de ces dernières années, vous confiez vos données, vos mots de passe, vos coordonnées à de nombreux sites, sans savoir ce qu'ils en font, ce qu'ils peuvent en faire ou encore si tout cela est bien sécurisé : combien de sites n'utilisent toujours pas le HTTPS pour les formulaires de connexion (facebook, twitter & co), laissant transiter en clair vos mots de passe sur le réseau.

Le mécanisme d'OpenID est le suivant :

  1. Vous créez un compte (ou "identité") OpenID sur votre serveur : vous renseignez votre login, mot de passe, adresse mail, nom et quelques autres attributs
  2. Vous pouvez désormais aller sur un site supportant l'authentification OpenID : vous cliquez sur "Me connecter avec mon identifiant OpenID"
  3. Vous êtes redirigé vers votre serveur
  4. Vous vous identifiez sur votre serveur (avec le login et le mot de passe de votre compte OpenID)
  5. Vous êtes redirigé et automatiquement authentifié sur le site d'où vous venez.
  6. Si par la suite, vous allez sur un autre site qui supporte l'authentification OpenID, vous cliquez sur "Me connecter avec mon identifiant OpenID"
  7. Vous êtes redirigé vers votre serveur
  8. Et comme vous vous étiez déjà connecté auparavant, vous êtes automatiquement redirigé et authentifié vers ce deuxième site.

Je suis assez clair ? C'est le principe du SSO (Single Sign On) : On s'authentifie une fois et on est authentifié sur tous les autres sites avec cette même identité.
Ainsi, une seule identité, un seul endroit où sont stockés vos informations, mot de passe, coordonnées, etc. : chez vous !

Note : J'ai été un peu vite en disant "vous créez un compte OpenID sur votre serveur". Vous pouvez, si vous ne souhaitez pas le mettre sur votre serveur, créer un compte chez un fournisseur OpenID "public" ().


II. Être son propre fournisseur OpenID ?

Cet article a pour but de vous montrer comme être son propre fournisseur OpenID. Les raisons de devenir son fournisseur ont été évoquées ci-dessus (on reste maitre de ses données, de ses mots de passe, de son identité en centralisant tout ça chez soi). Je pense que quitte à centraliser quelque chose, autant que ce soit chez soi ;)

Pour faire cela, de nombreuses applications sont disponibles, dans de nombreux langages (). Pour ma part, j'ai mis en place SimpleID, une application simple, rapide à mettre en place, sécurisée, en PHP, sans base de données.

Téléchargement de SimpleID

On va commencer par télécharger la dernière version de SimpleID sur du site officiel (la 0.7.5 à l'heure où j'écris cet article). Puis il faut extraire ce fichier dans votre répertoire apache et faire pointer apache vers le répertoire www (documentroot).
Dans mon exemple, j'utiliserai l'URL id.domaine.fr

Configuration de SimpleID

Il faut commencer par renommer le fichier www/config.inc.dist en www/config.inc. Voici la seule modification que j'ai apporté à ce fichier :
define('SIMPLEID_BASE_URL', 'http://id.domaine.fr');
Note : Je ne logue rien, sinon il aurait fallu renseigner le fichier de log dans ce fichier config.inc

Création d'une identité

Une identité est un identifiant OpenID unique. C'est, en général, une URL.
Je vais créer un fichier d'identité :
cp identities/example.identity.dist identities/benjamin.identity
J'ai appelé le fichier "benjamin.identity" car mon login sera benjamin (c'est comme ça qu'on défini un login en fait). Voici ce que j'ai changé dans ce fichier :
identity="http://id.domaine.fr/benjamin/"
pass="xxx45xx54x4x1x1xxx"
administrator=1

[sreg]
nickname="Benjamin"
email="[email protected]"
fullname="Benjamin"
dob="1988-01-29"
gender="M"
postcode="54000"
country="fr"
language="fr"
timezone="Europe/Paris"

J'ai décidé que mon identité serait id.domaine.fr/benjamin. Cette identité doit être une URL valide qui pointe vers un fichier index.hml. Il faut donc que je créé un répertoire id/www/benjamin/ (car mon répertoire www est mon documentroot apache)  et que j'y mette un index.html qui va contenir le code ci-dessous. Ce code va faire "pointer" cette identité vers mon SimpleID (mon fournisseur OpenID) :

<html>
<head>
<title>Mon profil</title>
<!--Je récupère les 2 tags suivants dans mon interface id.domaine.fr-->
<link rel="openid.server" href="http://id.domaine.fr/" />
<link rel="openid2.provider" href="http://id.domaine.fr/" />
</head>
<body>
Bienvenue sur ma page de profil. Vous pouvez inscrire ce que vous voulez ici. C'est votre page publique.
</body>
</html>

Cette URL sera donc utilisée en cas de connexion OpenID (vous serez redirigé vers votre serveur d'authentification) mais vous pourrez également accéder directement à cette URL (http://id.domaine.fr/benjamin) pour voir le contenu de la page index.html (pourquoi pas y mettre votre CV).

Ajout de Jocelyn Delalande (merci) :

L'URL d'identité est n'importe quelle URL que vous considérez comme vous identifiant sur le net (votre blog, votre page perso...). Vous la choisissez comme vous voulez, tant qu'elle est valide. La seule nécessité est de pouvoir ajouter les deux balises <link> déclarant l'emplacement du serveur openid.


III. Démonstration

J'utilise un dokuwiki sur mon serveur pour prendre mes notes. J'ai donc installé le pour la connexion dokuwiki via OpenID. Voici donc les différentes étapes de l'authentification :

En cliquant sur "Connexion" dans dokuwiki, on a le choix entre une connexion "normale" ou se connecter en cliquant sur "vous connecter avec OpenID" :


Puis on va renseigner notre identité OpenID :


On est redirigé sur notre SImpleID où on va s'authentifier :


Notre serveur nous demande une confirmation de connexion sur dokuwiki et récapitule les différents attributs qui vont être envoyés :


En validant, nous sommes redirigés vers dokuwiki, authentifiés :


IV. Conclusion

Je pense que tout ceux qui le peuvent devraient avoir son propre fournisseur OpenID. Ce système d'authentification n'est pas encore adopté partout, simplement car c'est une technique manque de promotion et d'utilisateurs. Donc plus les gens utiliseront ce système et plus les sites l'utiliseront aussi.

Dans cet article, j'ai donné l'exemple d'identité "id.domaine.fr/benjamin" mais il aurait été possible de faire un virtualhost à part entière (par exemple "benj.domaine.fr") qui serait peut-être plus "beau" et plus rapide à taper ;)

Dans un prochain article, je vous montrerai comment utiliser OpenID pour remplacer une authentification htaccess d'apache.

J'espère avoir été assez clair et vous avoir donné envie d'essayer (et d'adopter OpenID). Si vous avez des questions, n'hésitez pas ;)