Soyez votre propre fournisseur OpenID avec SimpleID
Cet article a été publié par Benjamin
le 08-01-11 à 13:01 dans la catégorie Auto hébergement
Tags :
- auto-hebergement
- Libre
- Serveur
- Tutoriel
J'ai eu du mal à trouver un titre court et précis pour cet article. Voici les points que je sohaite aborder dans cet article : Qu'est ce qu'OpenID ? Qu'est ce qu'être fournisseur OpenID ? Pourquoi l'être ? Comment l'être ?
Il est temps de reprendre le contrôle de nos données. Ça, je ne vous l'apprends pas. Mais que pensez-vous de reprendre également le contrôle de votre identité numérique, de vos identifiants, de vos mots de passe. Comment centraliser vos informations personnelles chez vous, sur votre machine ?
Je vais essayer de répondre à ces questions dans cet article.
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 :
- 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
- Vous pouvez désormais aller sur un site supportant l'authentification OpenID : vous cliquez sur "Me connecter avec mon identifiant OpenID"
- Vous êtes redirigé vers votre serveur
- Vous vous identifiez sur votre serveur (avec le login et le mot de passe de votre compte OpenID)
- Vous êtes redirigé et automatiquement authentifié sur le site d'où vous venez.
- Si par la suite, vous allez sur un autre site qui supporte l'authentification OpenID, vous cliquez sur "Me connecter avec mon identifiant OpenID"
- Vous êtes redirigé vers votre serveur
- 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" (liste des fournisseurs).
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 (voir la liste). 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 la page de téléchargement 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="xxxxxx@gxmail.com"
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 plugin 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 ;)
Commentaires
Je crois que le paramètre « timezone » devrait plutôt être « Europe/Paris ».
En effet, merci :)
Bon article, le fait que tu l'aie écrit m'évitera de le faire ;-). Je confirme pour avoir cherché et essayé plusieurs solutions, simpleID est pour moi la plus simple à mettre en place tout en étant techniquement complète.
Je trouve par contre le passage sur l'URL d'identité peu clair (la doc de simpleID ne vaut pas mieux sur ce point).
Donc précisons : 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é, comme expliqué dans l'article, est de pouvoir ajouter les deux balises
<link>
déclarant l'emplacement du serveur openid.Autre remarque, le code html n'est pas formaté comme du code dans le billet.
En aucun cas, la page ne doit s'apeller index.html ou quoi que ce soit, c'est à mon avis une précision plus déroutante qu'autre chose...
Et sinon, à quand de l'OpenID dans les commentaires de ce blog ? :-)
J'ai eu un peu de mal à définir cette notion clairement c'est vrai :)
J'ai ajouté ta remarque dans l'article (merci).
Je vais regarder pour avoir des commentaires en OpenID, bonne idée !
On peut utiliser OpenID sans mettre en place PHP, avec Python c'est extrêmement facile.
De plus Apache, n'est pas le seul serveur Web.
Je dois manquer quelque chose car ca ne marche pas pour moi...
J'ai installe simpleid sur un sous-domaine que je me suis cree (domaine heberge). J'ai aussi fait une redirection du sous domaine vers www et suivi la procedure ci dessus.
Je peux me connecter dans simpleid en rendant directement a l'adresse mais si j'essaye de me connecter a un site avec openid il me repond:
Could not discover an OpenID identity server endpoint at the url: http://xxx.yyy.zzz/ppmt (note addresse edite ;) )
Je vais continuer a cherche mais au cas ou je demande quand meme.
Très bien, ça fait longtemps que je cherche à ête mon propre fournisseur OpenID. Mais je cherche un logiciel qui identifie sur PAM. J'ai envisagé de le code, mais la spécification OpenID est rédigée de façon très peu compréhensible.
@ppmt : As-tu bien indiqué les 2 tags dans ta page d'identité ? Tu peux obtenir ces 2 tags directement dans l'interface web de simpleid pour être sûr.
Un autre problème que j'ai rencontré, regarde chez toi, dans ma config de fichier identity, la ligne suivante :
identity="http://id.domaine.fr/benjamin/" : n'oublies pas le slash à la fin.
@Elessar : Je n'ai pas regardé pour un fournisseur qui authentifie PAM. Peut-être voir du côté des fournisseurs perl ?
Merci pour ce petit tuto.
Quelqu'un a-t-il tester avec Dailymotion, ça ne marche pas pour moi...
Auto correction, avec l'aide des log de nginx, je me suis rendu compte que le problème venait du SSL, en l'installant sur un domaine sans SSL ça fonctionne correctement !
@Benjamin: j'ai corrige le / dans mon identité mais ca n'a pas aide. J'ai bien les tags qui pointe vers mon le domaine.
En fait je pense que comme je ne contrôle pas complètement le domaine ca doit venir de la. dans le tuto tu dis de pointer le domaine vers le répertoire www. Tu as fais ca comment pour toi? avec une url_rewrite dans le .htaccess?
@Elessar le projet et mort mais gracie semble être ce que tu cherches. Il y a un paquet debian et tout mais ça n'est apparement plus développé et leur serveur ne répond plus... Si tu cherchais un projet à reprendre.
Concernant le bien fondé d'un openID sur PAM, l'idée me séduit également, j'utilise PAM autant que possible pour tous mes services auto-hébergés... mais le risque de phishing pèse trop dans la balance, je ne veux pas y exposer les identifiants des utilisateurs de mon serveur.
@ppmt : Alors, il faut bien faire la différence entre l'URL de ton serveur SimpleID et celle de ton identity.
Comme l'avait dit Jocelyn : 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é, comme expliqué dans l'article, est de pouvoir ajouter les deux balises <link> entre <head> et </head déclarant l'emplacement du serveur openid.
Quand tu dois mettre ton "identifiant openid" sur un autre site, c'est l'URL de ta page d'identité et non celle de ton serveur SimpleID.
oui je progresse....j'utilise maintenant le www dans mon adresse plutôt que de rediriger et la j'ai bien accès a la demande d'authentification
Sauf qu'après ca échoue mais j'avance donc je persiste....merci pour l'aide et désolé pour la pollution :(
Si jamais tu trouves pas, poste ton erreur ici, j'essayerai de t'aider ;)
he he!!!! finalement ca marche.
J'essayai de me loger sur le blog de ma femme (wordpress avevc plugin openid) et ca coincais.
Aujourd'hui j'essai sur une autre site (getsatisfaction.com) et la ca marche....content que je suis
Puis en regardant de plus pres je me suis rendu compte que je m'etais deja connecte par openid en utilisant mon openid de launchpad.
Je l'ai efface et maintenant je peux me connecter avec ma Simpleid :) sauf qu'a chaque fois j'ai ce message
Warning: This web site has not confirmed its identity and might be fraudulent. Do not share any personal information with this web site unless you are sure it is legitimate. See the SimpleID documentation for details (OpenID version 2.0 return_to discovery failure)
et je suis renvoye a mon profil dans wordpress
c'est bizarre quand meme non ? a moins que ce qui importe c'est le nom utilisateur et comme c'etait le meme ca coincait?
enfin ca marche donc c'est le principal. Merci pour votre patience
@ppmt : j'ai ce message avec la majorité des sites que j'utilise en openid. J'avoue ne pas bien l'avoir compris, même en lisant la doc de simpleid.... Si quelqu'un avait une explication, je prend aussi :)
@ppmt : Je crois que j'ai pigé après relecture et recherches. En gros, la spec OpenID offre (mais c'est optionel) à un site consommateur d'openid de déclarer dans le code de la page (cf spec) quelles URLs sont suceptibles d'être utilisées comme redirection une fois l'authentification effectuée chez le fournisseur d'identité. Le provider OpenID fait donc une requête chez le consommateur pour récupérer cette info avant de faire la redirection elle-même.
Ça permet de vérifier qu'on redirige vers une URLs "sûres", aptes à traiter la réponse d'un provider openID en non pas une URL qu'un code malicieux ou un bug nous fait atteindre. D'autre part, en analysant le code HTML d'un site, un programme peut découvrir à l'aide de cette déclaration si le site est un consommateur OpenID en puissance.
Après je peux comprendre les raisons pour lesquelles tout le monde ne l'implémente pas, ça à le coût d'une requête en plus et ça demande un petit effort de développement du consommateur : savoir et déclarer précisément ses URL de retour pour un bénéfice pas énorme...
Le manuel de SimpleID explique en tout cas (une fois qu'on a compris de quoi il retournne) comment désactiver cet avertissement.
Intéressant, merci
Merci pour cet article ...
Je voulais savoir si on peux utiliser OpenID pour un grand projet au niveau national supportant des millions d'utilisateurs (5 millions d'utilisateurs)...
Quelles seront alors les caractéristiques du(des) serveurs et l'architecture de la solution ...
Merci pour votre réponse
Bonjour,
aucune idée, je pense que tu peux demander sur la liste de diffusion openid pour ça : http://lists.openid.net/mailman/lis...
Bonjour,
Je tente d'utiliser le plugin openID pour DokuWiki. Exactement comme dans l'exemple donné ici.
Mon plugin est installé. Mon OpenId fonctionne très bien avec Spip notamment.
Mais quand j'essaie de m'identifier dans DokuWiki avec cette openID, je suis renvoyé sur la page /doku.php qui reste blanche.
Pouvez-vous m'aider ?...
Cordialement,
Fabrice
"Il faut donc que je créé un répertoire id/www/benjamin/" ca veut rien dire pour moi...
Il faut le créé exactement su id/www/benjamin ? dans quel fichier il va savoir que dans ce repertoire se trouve le fichier html index ?
je trouve que ca manque d'explication...
Slut Benjamin,
J'ai configure SimpleID qui fonctionne parfaitement tout seul lors d'une simple authentification mais il ne redirige pas une fois authentification faite vers le lien du parametre issuer.
Une idee?
Merci d'avance.
Comme suis mon fichier openid.yml
host: localhost
client_id: gaetan
client_secret: oC86JE_l_ZXTGCJ30T4aPbDj
additional_properties: