Identifiez les avantages et les applications de OAuth 2.0

Identifiez les fonctions de OAuth

Au cours de la derniĂšre partie, vous avez vu ce qu'Ă©taient l’authentification et l’autorisation. Nous avons créé un formulaire de connexion en utilisant Spring Security, puis nous avons ajoutĂ© des pages sĂ©parĂ©es en autorisant l’accĂšs en fonction des rĂŽles (administrateur et utilisateur). C’était une premiĂšre dĂ©monstration sur la façon d'utiliser l’authentification et l’autorisation sur le mĂȘme site.

La crĂ©ation d’une connexion sĂ©curisĂ©e est simple
 en thĂ©orie. 😉

Imaginez que vous ĂȘtes dĂ©veloppeur d’application pour une petite entreprise de e-commerce. Des clients se connectent et effectuent des achats en utilisant leurs donnĂ©es personnelles. La majoritĂ© des violations de donnĂ©es prennent pour cible les petites entreprises, car elles ne dĂ©dient gĂ©nĂ©ralement pas un budget important aux mesures de protection de donnĂ©es.

Heureusement, il existe une solution à ce problÚme : OAuth ! 

Hein ? 😹

Pas d’inquiĂ©tude. Vous apprendrez tous ces dĂ©tails techniques Ă  mesure que nous avancerons dans ce chapitre. Pour l’heure, laissez-moi vous donner une idĂ©e gĂ©nĂ©rale de la chose. 😎

En clair, OAuth 2.0 permet Ă  vos clients de crĂ©er un compte sur votre application web en se connectant sur un compte appartenant Ă  une sociĂ©tĂ© vĂ©rifiĂ©e, comme Google, Facebook, Twitter, Okta ou GitHub. Vous vous ĂȘtes probablement dĂ©jĂ  enregistrĂ© sur un site permettant de crĂ©er un profil via votre compte Google ou Facebook.

Cette application web vous permet de crĂ©er un compte avec vos identifiants Google ou Facebook. Beaucoup d’utilisateurs choisissent ce mode de connexion, facile et rapide. Dans ce cas, Google et Facebook sont qualifiĂ©s de fournisseurs d’identitĂ© (IdP). Ces derniers sont utilisĂ©s pour authentifier un utilisateur et gĂ©rer son identitĂ©. 

Ça ressemble Ă  une authentification
 alors pourquoi OAuth est-il considĂ©rĂ© comme un protocole d'autorisation ?

Ces sociĂ©tĂ©s (Google, Facebook, etc.) gĂšrent l’authentification sur leur serveur, en tant que fournisseurs d’identitĂ©. Cependant, lorsqu’il s’agit de se connecter Ă  une application via un fournisseur d’identitĂ©, OAuth dĂ©lĂšgue les permissions requises au cours de ce processus. 

Qu’entendez-vous par “permissions” ?  

Les permissions reviennent à donner l’accùs à une information. OAuth permet à l’utilisateur et au serveur qui gùre la connexion, par exemple Google, d'autoriser l’utilisation de certaines informations par l’application.

Facebook gĂšre la partie connexion ; vous n’avez donc pas besoin de crĂ©er un nouveau compte. Il n’est mĂȘme pas nĂ©cessaire que vous donniez vos identifiants Facebook Ă  ce site. En tant que dĂ©veloppeur, inutile de s’embĂȘter Ă  mettre en place une base de donnĂ©es sĂ©curisĂ©e pour gĂ©rer les identifiants de chacun. OAuth s’en charge pour vous.

Maintenant que vous avez une idĂ©e de ce que c’est, regardons de plus prĂšs le fonctionnement de OAuth 2.0. Une fois que vous aurez compris tout ça, il vous sera plus facile de l’implĂ©menter dans votre code en utilisant Spring Security.

DĂ©crivez le Code Workflow de l’autorisation de OAuth 2.0

Regardons ce protocole d'autorisation étape par étape.

Étape 1 : Connection au serveur d’autorisation de Facebook

Imaginons que vous souhaitiez vous connecter Ă  OpenClassrooms.

Pour rappel, il existe deux entités clés dans ce processus :

  • l'utilisateur : c’est vous, la personne qui se connecte Ă  OpenClassrooms avec OAuth ;

  • le client : l’application web Ă  laquelle vous vous connectez avec le bouton “Se connecter avec Facebook”.

Vous cliquez pour vous connecter Ă  Facebook.

Cette image montre la page d'accueil du site Openclassrooms. Pour se connecter à la plateforme, il est proposé de le faire via Facebook et Google notamment. Ce sont des boutons sur lesquels on peut cliquer
Cliquez sur l’option de connexion de Facebook

Le client vous dirige vers le serveur d’autorisation de Facebook.

Il s’agit du serveur auquel vous vous connectez grĂące Ă  vos identifiants Facebook. Ce serveur est enregistrĂ© avec OpenClassrooms.

Cette image montre ce qu'il se passe lorsque l'on a cliqué sur le bouton
Se connecter via Facebook

Étape 2 : Autorisation avec OAuth

Lorsque que vous entrez vos identifiants Facebook, l’indication suivante apparaüt :

“Autorisez-vous OpenClassrooms Ă  accĂ©der Ă  votre liste de contacts ?”

OAuth s’assure alors que vous acceptez ce pĂ©rimĂštre (scope, en anglais).

Les donnĂ©es spĂ©cifiques requises dans le scope sont qualifiĂ©es de claims (des clĂ©s). Ces clĂ©s peuvent reprĂ©senter des donnĂ©es personnelles d’utilisateurs, dont le nom entier, l’adresse mail, etc. Il peut Ă©galement s’agir de droits spĂ©cifiques dans le cadre de l’autorisation, comme un mode lecture seule, ou une suppression d’accĂšs concernant une clĂ© spĂ©cifique.

Cette image montre qu'une nouvelle fenĂȘtre pop-up apparait et signale qu'OpenClassrooms recevra les informations de profil associĂ©es au compte Facebook de l'utilisateur. Il y a un bouton sur lequel cliquer pour continuer.
Pop-up de permission de OAuth

Si vous rĂ©pondez oui, vous serez redirigĂ© vers l’URL de redirection avec un code d’autorisation. Il s’agit d’un code temporaire qui dĂ©tient les informations concernant vos identifiants Facebook.

Étape 3 : Autorisation en Ă©change d’un token d’accĂšs

Le client envoie un code d’autorisation au serveur d’autorisation de Facebook, en Ă©change d’un token d’accĂšs Ă  votre liste de contacts. Ce token dĂ©tient des informations d’autorisation de Facebook.

Interaction avec le serveur d’autorisation
Interaction avec le serveur d’autorisation

Étape 4 : Validation avec le serveur de ressources

Ce token est envoyĂ© vers le serveur API de Facebook, qui est appelĂ© serveur de ressources dans ce workflow. Ce serveur vĂ©rifie les informations sur le token d’accĂšs, et permet au client d’accĂ©der aux donnĂ©es d’utilisateur requises dans l’application. 

Interaction avec le serveur de ressources
Interaction avec le serveur de ressources

Désormais, chaque fois qu'OpenClassrooms vérifiera votre connexion, il procédera à votre validation et à celle des informations autorisées sur le serveur de ressources de Facebook.

Et voilĂ , maintenant vous savez comment fonctionne OAuth 2.0 !

Comprenez OpenID Connect (OIDC)

OAuth 2.0 travaille avec des fournisseurs d’identitĂ© externes qui garantissent une authentification sĂ©curisĂ©e. Le processus OAuth 2.0, quant Ă  lui, traite majoritairement de l’autorisation. Que faire si un site nĂ©cessite plus d’informations, comme un nom, un prĂ©nom et une adresse vĂ©rifiĂ©s ?

Mais d'ailleurs, c’est quoi, un nom et une adresse vĂ©rifiĂ©s ? 

Lorsque vous vous enregistrez sur des sites spécifiques et que vous leur fournissez une adresse mail, votre enregistrement n'est validé que lorsque votre e-mail est vérifié.

Habituellement, cette vĂ©rification a lieu lorsque vous cliquez sur le lien qui vous est envoyĂ©. Le fournisseur d’identitĂ© peut alors prouver la vĂ©rification de vos donnĂ©es personnelles de cette maniĂšre.

Comment cela se traduit dans OAuth 2.0 ?

OAuth est un protocole d’autorisation qui, une fois enregistrĂ© auprĂšs du fournisseur d’identitĂ©, renvoie un token d’accĂšs contenant un principal et un objet authorities. Ce token permet de valider votre identitĂ© auprĂšs du fournisseur. 

Le principal représente les informations vous concernant, que le fournisseur d'identité renvoie.

Comment rĂ©gler ce problĂšme ? Comment faire pour que l’application web client dispose d'informations vĂ©rifiables et prouvĂ©es pour s'authentifier ?

Je vous présente (roulement de tambour) une extension OAuth 2.0 assez incroyable : OpenID Connect (OIDC). Elle peut ajouter la piÚce d'authentification manquante à OAuth 2.0.  

Et donc, comment ça marche ? 

Souvenez-vous : l’authentification revient Ă  prouver qui vous ĂȘtes, qui vous prĂ©tendez ĂȘtre.

Avec OIDC, le client peut obtenir vos données encodées depuis le serveur ressource de Facebook, comme une adresse mail vérifiée, et donc, est capable de vous authentifier.

Les donnĂ©es personnelles encodĂ©es se prĂ©sentent sous la forme d'un token chiffrĂ©. Ce token est renvoyĂ© vers l’application web du client. Il contient les informations protĂ©gĂ©es, les claims, qui reprĂ©sentent le dĂ©tail des informations pour l’utilisateur concernĂ©, depuis le scope Open ID.

Comment s’en servir ?

Voici trois maniĂšres dont OIDC rĂ©sout les problĂšmes d’authentification, en ajoutant la sĂ©curitĂ© ainsi que l’identitĂ© dans le fournisseur d’identitĂ© externe.  

  1. En raison de l’encodage en Base64 de la clĂ© privĂ©e du fournisseur d'identitĂ©, lorsque l’authentification requiert OIDC, un hacker ne peut pas injecter de fausses informations pour modifier le principal du client, car le token ID, le token d’accĂšs et le token de rafraĂźchissement sont envoyĂ©s encodĂ©s via HTTPS. 

  2. Le token d’identitĂ© est temporaire, l’authentification est donc vĂ©rifiĂ©e en permanence. Le token d’accĂšs de OAuth 2.0 est valide durant 24 heures, et ne peut ĂȘtre rĂ©tabli qu'avec un token de rafraĂźchissement. Cela rend le suivi de l'authentification de l’utilisateur un peu plus compliquĂ©, et donc moins vulnĂ©rable aux attaques. Vous pouvez modifier le dĂ©lai d’expiration du token d’accĂšs en suivant ces Ă©tapes (en anglais). 

  3. Qu'il s’agisse de l'OpenID, du profil, de l'e-mail, du tĂ©lĂ©phone ou de l'adresse, OAuth 2.0 permet de rĂ©cupĂ©rer ces informations (stockĂ©es dans une partie protĂ©gĂ©e du token d’accĂšs) grĂące Ă  la requĂȘte d’autorisation de OAuth 2.0.

Prenons l’exemple d’un token d’identitĂ© utilisĂ© pour valider l’authentification d’un utilisateur.

Votre sociĂ©tĂ© utilise OAuth 2.0 avec Amazon Web Services (AWS) en tant que fournisseur d'identitĂ©, et single sign-on (SSO) pour authentifier les utilisateurs Ă  plusieurs applications d’entreprises. Vous pouvez utiliser OpenID Connect comme SSO afin d'authentifier les utilisateurs sur toutes les API des diffĂ©rentes applications, sans avoir Ă  rĂ©pĂ©ter l’opĂ©ration d’authentification plusieurs fois. Le token d’accĂšs sert Ă  valider les utilisateurs Ă  travers plusieurs API et plateformes, rendant ainsi la gestion des authentifications simple et sĂ©curisĂ©e. 

C’est quoi la diffĂ©rence entre un token d’accĂšs et un token d’identité ? 

OAuth utilise des tokens d’accĂšs car ils sont plus sĂ©curisĂ©s que des cookies de session. Les tokens ne rĂ©vĂšlent aucune information concernant les identifiants de l’utilisateur ou sa session. Les tokens d’accĂšs disposent de noms d’utilisateurs et d'informations d’autorisation. Ces informations ne sont pas toujours des tokens JWT, et ne sont pas toujours encodĂ©es : leur sĂ©curitĂ© n’est donc pas toujours garantie.

Les tokens d’identitĂ© sont des jetons JWT encodĂ©s avec Base64, via une clĂ© privĂ©e fournie par le fournisseur d'identitĂ©. Ces tokens ne peuvent donc ĂȘtre dĂ©codĂ©s que sur permission du fournisseur d'identité !

Comment l’ajout d’OIDC modifie-t-il le workflow d’OAuth ? 

Les seuls éléments qui peuvent subir des modifications sont les étapes 1 et 2 du workflow 2.0.

À l’étape 1, vous cliquez sur “Connectez-vous avec Facebook”. Le client vous renvoie alors vers le serveur d'autorisation de Facebook via une URL de redirection et un scope. Ce scope est destinĂ© Ă  OIDC, et dĂ©finit des claims spĂ©cifiques rĂ©alisĂ©s par l’application client. 

À l’étape 3 du workflow d’ OAuth 2.0, le client transmet le code d’autorisation au serveur d’autorisation de Facebook, en Ă©change d’un token d’accĂšs. Avec OIDC, un token d’accĂšs est retournĂ© au client avec un token d’identitĂ©. Ce dernier contient les informations du claim requises. 

Vous savez maintenant comment fonctionne l’autorisation OAuth 2.0, et vous connaissez les avantages de l’ajouter à OIDC !

En résumé

  • OAuth est un protocole d’autorisation permettant de profiler une connexion sĂ©curisĂ©e, en utilisant des jetons d’encodage sans Ă©tat pour sĂ©curiser les sessions des utilisateurs sur une application web.  

  • OAuth travaille avec des fournisseurs d’identitĂ©, qui gĂšrent les authentifications. OAuth gĂšre l’autorisation des permissions par l’utilisateur, ainsi que les serveurs du fournisseur d’identitĂ©.  

  • OIDC peut ĂȘtre ajoutĂ© au scope (permission), pour que le client identifie l'utilisateur avec un token d’identitĂ© et des donnĂ©es personnelles vĂ©rifiĂ©es additionnelles, appelĂ©es claims.  

Au prochain chapitre, nous ajouterons le formulaire de connexion par dĂ©faut en utilisant GitHub, et apprendrons Ă  l’ajouter Ă  OIDC. 

Et si vous obteniez un diplĂŽme OpenClassrooms ?
  • Formations jusqu’à 100 % financĂ©es
  • Date de dĂ©but flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous