Choses à faire

24h dans une journée, et tant de choses à faire !

Authentification en un clic avec OpenID et OAuth (2/3)

publié le 27 février 2012 par Pierre Quillery
Formulaire de connexion sur Google.fr

Formulaire de connexion de Google

Nous avons vu dans un précédent article les tenants et les aboutissants de la connexion avec OpenID et OAuth – nous allons nous attarder dans cet épisode sur la connexion avec OpenID, le système le plus simple des deux.

Ainsi que je le précisais, OpenID permet d’établir une connexion avec le fournisseur de votre choix sans nécessiter une action particulière de votre page : il vous suffit d’indiquer à la librairie l’URL du service à interroger ainsi qu’une URL de retour (on parle de callback) de votre côté. Cette adresse sera appelée que l’internaute accepte ou non la connexion, vous permettant de gérer facilement tous les cas de figure.

Choix d’implémentation

Il convient d’abord de choisir une librairie PHP qui va nous permettre d’établir facilement la connexion. J’ai utilisé avec succès Light OpenID mais ce n’est pas la seule, loin s’en faut. Cette librairie est surtout utile pour le côté consumer, alors que d’autres fournissent également le volet server : tout dépend donc de vos besoins. Par ailleurs, sa documentation est simple et efficace et vous fournira rapidement des réponses aux questions que vous pourriez vous poser.

OpenID Selector vous permettra de gérer facilement la connexion de l'internaute

Reste ensuite à déterminer comment présenter un formulaire simple et efficace à l’internaute lui permettant de choisir un fournisseur de connexion connu ou de préciser le sien. Vous pouvez bien sûr concevoir ce formulaire à la main, mais pour faire des tests je vous recommande vous tourner vers OpenID Selector, qui va encapsuler ce processus pour vous en Javascript.

Si vous souhaitez le faire à la main, jetez un œil à la prochaine section, voilà les identifiants vers quelques un des principaux fournisseurs OpenID avec lesquels j’ai travaillé. Ils vous serviront à renseigner la variable $openid->identity que vous trouverez dans la source reproduite un peu plus loin.

  • Google : https://www.google.com/accounts/o8/id
  • Yahoo! : https://me.yahoo.com
  • Orange : http://openid.orange.fr

Établissement de la connexion

Sans plus attendre, voici donc la première étape de connexion à Google, qui propose un service d’authentification OpenID. Nous verrons plus tard quels identifiants peuvent être utilisés pour les autres fournisseurs.

Comme vous le voyez, il ne se passe ici rien de dramatique, on se contente de rediriger l’internaute vers le formulaire de connexion de Google – j’ai mis tout en haut de l’article une capture du formulaire que vous pouvez obtenir dans une popup, par exemple. Quel que soit le service, la présentation est toujours similaire : on demande clairement à l’internaute d’autoriser le partage de certaines des informations demandées à l’établissement de la connexion avec nous.

Gestion du retour de connexion

Après soumission du formulaire chez notre fournisseur de connexion, ce dernier va utiliser l’URL précisée dans la propriété $openid->returnUrl pour revenir vers nous avec les informations de connexion de l’internaute ou une erreur, le cas échéant, voilà donc le code permettant de gérer cela.

Comme vous le voyez il est nécessaire de prévoir un retour un peu spécifique pour Google, car sa façon de présenter les données est légèrement différente — rien de terrible heureusement. J’ai pris ici le parti de lever une exception en cas d’erreur et de passer par une méthode de connexion placée dans une hypothétique classe Internaute.

Voilà, c’est tout pour cette fois-ci : dans un prochain épisode je me propose de vous montrer comment procéder à la connexion à un serveur OAuth et, croyez-moi, OpenID c’est une franche rigolade à côté 😉 … À bientôt !

Les textes, illustrations et démonstrations présents sur ce site sont la propriété de leurs auteurs respectifs, sauf mention contraire (photo de la bannière).
Chosesafaire.fr, un site propulsé par Wordpress, vous est proposé par Pierre Quillery & Killian Ebel.

Valid XHTML 1.0 Strict