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.
Regardons ce protocole d'autorisation étape par étape.
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.

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.

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.

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.
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.

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.Â

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 !
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. Â
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.Â
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).Â
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Â !
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.Â