OAuth et OpenId
Une partie de ces ambitions a été réalisée avec le SSO (2015)
ATTENTION (2017-07-20) - la situation peut avoir changé depuis que ces informations ont été écrites
Introduction
Pourquoi cette fiche ?
Avec le développement du net, et particulièrement des sites sociaux et participatifs, il se dégage un vrai besoin en ce qui concerne l'identité numérique pour les internautes. Facebook en est d'ailleurs la meilleure preuve
Le temps où les seuls identifiants et mots de passe dont on devait se soucier étaient ceux de son mail (quand on en avait encore qu'un seul) est révolu, et l'inscription devient de plus en plus nécessaire (et même quelque fois obligatoires sur certains sites) pour profiter de leur services.
Tela devant gérer une base données assez conséquentes d'utilisateurs (aux alentours de 10 000), nous sommes confrontés à ce problème, aussi bien les pôles informatiques que acceuil et communication : en effet, combien d'utilisateurs perdent leur mot de passe Tela ? Changent de mail sans changer cette information sur Tela ? Combien sont inscrit sur Yahoo et pas sur Tela et ne peuvent pas communiquer ensemble ?
Et plus généralement, combien en ont assez de devoir remplir les mêmes informations sur différents sites où il est nécessaire de s'inscrire.
De tout cela, se dégagent deux besoins :
- Celui de se construire une identité numérique qui soit centralisée et "officielle". C'est dans un sens ce que tente de faire Facebook, mais c'est une société privée, dont les interêts ne concorderont pas toujours (pas souvent?) avec ceux des utilisateurs du net.
- Celui de pouvoir partager des informations d'un site à un autre, importer des photos d'un forum Yahoo sur Tela par exemple, ou bien de pouvoir rassembler des données provenant de différents sites. C'est un peu ce que l'on peut faire sur Netvibes ou dans son lecteur de flux RSS, mais on ne fait qu'y lire des informations ; et on pourrait vouloir imaginer une application qui rassemble des données de différents sites et permettent de les gérer toutes au même endroit, par exemple :
- Je participe à determination de plantes, je peux y envoyer un mail que j'ai préparé sur yahoo dans mes brouillons et y ajouter une photo à Flickr, tout ça sur la même page.
Au fur et à mesure du développement de Tela Botanica, il apparaît qu'il est crucial de prendre en compte sur le site et dans nos applications ces deux besoins et de participer à ce que des standards libres et interopérables se développent, tout comme il a été crucial au commencement de parier sur les logiciels et les données libres.
Pour conclure cette introduction (si l'on peut dire dire !), il faut trouver une moyen pour que utilisateur de Tela Botanica ne soient pas cantonnés à leur identité de telabotanistes, et que tout ce qu'ils sont et produisent, puisse être partagé sur d'autres espaces s'il le désirent.
Pour résoudre ces questions, nous allons étudier deux solutions libres en émergence : OpenID et OAuth
OpenId
Qu'est ce que 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. Le modèle OpenID se base sur des liens de confiance préalablement établis entre les fournisseurs de services (sites web utilisant OpenID par exemple) et les fournisseurs d’identité ( OpenID providers).
Il permet aussi d’éviter de renseigner à chaque fois un nouveau formulaire en réutilisant les informations déjà disponibles (source http://fr.wikipedia.org/wiki/OpenID).
Les acteurs mis en jeu
- l’utilisateur : il désire avoir une identité, qu'il pourra utiliser sur plusieurs sites web sans avoir à reremplir encore et encore les mêmes informations. Chaque utilisateur est identifié par une URI, qu’il acquiert auprès de son fournisseur d’identité OpenID.
- le consommateur (ou Relying Party) : il désire avoir une preuve de l’identité de l’utilisateur. C’est un site web, un service web, une application...
- le fournisseur d’identité ( OpenID Provider) : c’est un serveur d’authentification OpenID qui est contacté par le consommateur pour obtenir une preuve de l’identité de l’utilisateur. OpenID est décentralisé, c'est-à -dire que quiconque peut devenir fournisseur sans avoir besoin de s'enregistrer ou d'obtenir la permission d'une quelconque organisation centrale.
- le client, par exemple le navigateur internet de lÂ’utilisateur.
Comment ça marche ?
Créer un compte OpenID :
Le mode de fonctionnement est le suivant :- L’utilisateur choisit un fournisseur d’identité OpenID, par exemple VeriSign
- L’utilisateur choisit un nom d’utilisateur (Mrbota pour l’exemple), un mot de passe et crée son compte.
LÂ’utilisateur peut renseigner certaines informations le concernant.
Ce compte aura pour identifiant OpenID : Mrbota.pip.verisignlabs.com. Le profil de l’utilisateur est également disponible à cette adresse.
S'identifier :
Le mode de fonctionnement est le suivant, avec MyOpenId pour fournisseur d’identité :- L’utilisateur Mrbota désire, par exemple, accéder à une partie du Site Tela Botanica qui requiert que l’utilisateur soit authentifié.
- LÂ’utilisateur entre son identifiant : Mrbota.pip.verisignlabs.com.
- Tela Botanica contacte Verisign et ils créent ensemble un secret partagé.
- L’utilisateur est redirigé vers Verisign et entre son mot de passe pour s’authentifier.
- L’utilisateur est alors averti que Tela Botanica souhaite avoir accès à certains attributs de son profil OpenID (par exemple, son nom, prénom, et son adresse de courriel), pour pouvoir l'authentifier, et même réaliser une vraie inscription à minima à Tela Botanica s'il le désire. L'utilisateur accepte ou non cette demande.
- L’utilisateur est redirigé vers Tela Botanica avec une preuve cryptographique de son identité (créée grâce au secret partagé préalablement établi) fournie par Verisign et est authentifié.
Tant que la session de l’utilisateur est active, il pourra être reconnu automatiquement sur les autres sites utilisant OpenID grâce au mécanisme de l’authentification unique.
Quelques sites Web compatibles avec OpenId
- AOL
- Dailymotion
- Microsoft Windows Live
- Myspace
- Orange
- Sourceforge
- Yahoo
Quelques fournisseurs OpenId reconnus
- MyOpenID
- Verisign
- Yahoo
- Orange
- OpenIdissimo
- Clavid
- (voir liste complète sur le wiki OpenId)
De plus, depuis le 9 septembre 2009, le gouvernement des États Unis a adopté le standard OpenID pour l'administration en ligne.
Solutions techniques
Il existe de nombreuses librairies OpenID écrites en php, certaines permettent de s'identifier auprès d'une tierce partie, et d'autres fournissent aussi des moyens de devenir soi même fournisseur OpenID (ce qui est stratégiquement interessant pour Tela Botanica).
En voici quelque unes, toutes sous une licence libre (BSD ou Apache 2) :
- PHP OpenId identification : oui fournisseur d'identité : oui
- identification : oui fournisseur d'identité : oui
- Zend Framework OpenId component
- identification : oui fournisseur d'identité : oui
- Easy OpenID Librairie "Stand Alone" qui spécifie particulièrement n'utiliser aucune classe PEAR.
- identification : oui fournisseur d'identité : non
- Simple OpenId PHP Class Une classe "Stand Alone"
- identification : oui fournisseur d'identité : non
Questions :
- Pourquoi utiliser OpenID sur Tela Botanica ?
- OpenID semble amené à devenir un standard car utilisé par plusieurs sites populaires.
- Nous pouvons devenir nous même fournisseur OpenID et contribuer à établir une réputation de " site de confiance" à Tela Botanica. De plus la possibilité d'avoir un identifiant de la forme moi.pip.tela-botanica.org et pouvoir l'utiliser sur le net pourrait (peut-être ?) devenir un gage de serieux de la part d'un interlocuteur.
- Grâce à OpenId il sera possible d'alléger, voire de rendre quasi transparente la phase d'inscription sur le site de Tela, ou au contraire, permettre de s'en passer pour ceux qui ne le désirent pas.
- Le cas où la personne change de mail et oublie de le changer sur Tela sera révolu aussi car le mail sera une information centralisée.
- La cas pratique où une personne participe sur un forum de Yahoo et veut consulter quelques informations protégées sur Tela alors qu'elle n'est pas inscrite pourra être facilement résolu.
- OpenID est un standard libre, auquel nous pouvons contribuer, ce qui est dans la philosophie de Tela
Quelques liens :
- L'article sur Wikipedia, dont est issue pour une partie cette fiche.
- Site officiel d'OpenID
- MyOpenID Fournisseur d'identité reconnu
- OpenID avec Yahoo. Pour utiliser OpenID avec son compte Yahoo.
OAuth
Qu'est ce que OAuth ?
OAuth est un protocole libre, initié par Blaine Cook et Chris Messina, qui permet l'authentification à une API sécurisée d'une façon simple et standard depuis son bureau ou une application web. Pour les développeurs d'une application accédant à une API, OAuth est une façon de publier et d'intéragir avec des données protégées. Pour les développeurs fournissant une API, OAuth permet de donner accès aux données tout en protégeant le pseudo et mot de passe des utilisateurs. (source http://fr.wikipedia.org/wiki/OAuth).
Si OpenId se veut être un standard pour l'identité numérique, OAuth est son pendant en ce qui concerne le partage de ressources entre sites ou applications.
Exemple d'utilisation
Par exemple : je veux fabriquer album photo de mes dernières vacances sur le site monalbum.com.
Mes images sont situées sur sur le site mesphotos.com, elles sont privées, et je n'ai pas envie de les charger encore une fois sur un autre site web.
Les deux sites supportent OAuth et se conforment au standard.
Voici le protocole pour l'utilisateur
- Je suis identifié sur monalbum.com et je choisis d'importer des photos à partir d'un autre site : mesphotos.com
- Je suis amené sur mesphotos.com et on me demande de m'identifier (login + mot de passe), je m'éxécute.
- Un écran de mesphotos.com m'avertit que le site monalbum.com cherche à accéder à mes données en lecture seule et si j'accepte, cette autorisation sera valable une heure. J'accepte.
- Je suis ramené sur monalbum.com où l'on m'indique que les photos sont en train d'être récupérées.
- Une fois cela terminé, mes photos sont importées sur monalbum.com et je peux commencer à mettre en page mon album
- Conclusion : j'ai pu permettre au site monalbum.com d'accéder à des données privées sur mesphotos.com sans avoir à donner mes identifiants et mot de passe de mesphotos.com à mon album.com (contrairement à facebook qui demande le mot de passe hotmail et l'identifiant pour importer ses contacts en jurant sur la tête de toute sa famille qu'il ne le utilisera pas ni ne les conservera).
- De plus l'autorisation que j'ai donnée expire dans une heure, est en lecture seule, et ne concerne que ce qui est autorisé par l'api OAuth implémentée sur mesphotos.com; elle ne peut donc pas servir à accéder à mon compte sur ce site, ni a modifier mes données.
Solutions techniques :
- HTTP_OAuth Libraire PEAR pour OAuth
- OAuth Libraire php pecl pour l'interaction OAuth
- oauth-php librairie tierce pour clients et serveur OAuth
Questions :
- L'idée est alléchante mais répond elle à un des problèmes posés par le cahier des charges de l'annuaire ?
- Peut on l'utiliser pour établir un protocole de communication entre les applications et l'annuaire (pour fabriquer le résumé des réalisations d'un membre, ou pour fabriquer le tableau de bord des applications d'un utilisateur) ?
- Il existe des libraires PHP, mais elle ne sont pas standard, y a t'il d'autres solutions ?
Quelques liens :
- L'article OAuth sur Wikipedia, dont est issue pour une partie cette fiche.
- le site officiel de OAuth
- Le OAuth's beginner's guide (en anglais)