OAuth est un protocole standard ouvert qui permet à des applications d’accéder de manière sécurisée aux données d’un utilisateur sans que celui-ci ait à partager ses identifiants de connexion. Il permet aux utilisateurs d’accorder à des applications tierces l’accès à leurs ressources (informations personnelles, documents, images stockées dans une autre application, etc.) sans donner à ces applications leur mot de passe ni d’autres informations sensibles.

Le protocole OAuth repose sur la séparation entre le processus d’authentification et celui d’autorisation. Lorsqu’un utilisateur souhaite donner accès à une ressource à une application tierce, celle-ci redirige l’utilisateur vers le propriétaire de la ressource (par exemple un réseau social) pour qu’il autorise la demande. Le propriétaire de la ressource authentifie l’utilisateur, puis renvoie un jeton d’accès (access token) à l’application tierce, qui peut l’utiliser pour accéder à la ressource demandée.
Ce protocole est devenu une méthode incontournable pour mettre en œuvre l’autorisation et l’authentification dans les applications web et mobiles modernes. Il est utilisé par de nombreux services populaires, comme Google, Facebook et Twitter, pour donner accès à leurs API aux développeurs tiers et pour implémenter l’authentification sur de nombreux sites web.
Les principes d’OAuth2
Pour résumer, voici les principaux principes d’OAuth2 :
- Autorisation, et non authentification : OAuth2 est conçu pour permettre à un utilisateur d’accorder l’accès à ses ressources à une application tierce sans partager ses identifiants avec elle. Dans OAuth2, l’utilisateur est authentifié par le propriétaire de la ressource (par exemple un réseau social), puis l’application tierce est autorisée à accéder à ses ressources.
- Authentification par jeton : OAuth2 utilise des access tokens pour authentifier les requêtes. L’access token est délivré à l’application tierce par le propriétaire de la ressource et sert à accéder aux ressources de l’utilisateur.
- Autorisation par scopes : OAuth2 permet au propriétaire de la ressource de n’accorder à l’application tierce l’accès qu’aux ressources spécifiques que l’utilisateur souhaite partager. Cela passe par les scopes, qui définissent le niveau d’accès de l’application tierce aux ressources de l’utilisateur.
- Séparation des responsabilités : OAuth2 sépare les préoccupations d’authentification et d’autorisation. Chaque acteur peut ainsi se concentrer sur son domaine d’expertise, ce qui permet de construire des systèmes plus sûrs et plus scalables.
- Enregistrement des clients : OAuth2 exige que les applications tierces s’enregistrent auprès du serveur d’autorisation avant de pouvoir accéder aux ressources de l’utilisateur. Cela apporte un niveau de sécurité supplémentaire en garantissant que seules des applications de confiance y ont accès.
En résumé, OAuth2 offre un moyen sûr et scalable pour des applications tierces d’accéder aux ressources d’un utilisateur sans que celui-ci partage ses identifiants. En suivant ces principes clés, OAuth2 constitue un cadre solide pour construire des systèmes sécurisés et évolutifs.
OAuth vs SAML
OAuth et SAML sont deux protocoles d’authentification et d’autorisation très répandus dans les applications web modernes. Bien qu’ils répondent à un objectif similaire, qui est d’accorder l’accès à un utilisateur ou à une application, leur conception et leur approche diffèrent.
SAML (Security Assertion Markup Language) est un protocole basé sur XML, utilisé pour échanger des données d’authentification et d’autorisation entre des parties, notamment entre un Identity Provider (IdP) et un Service Provider (SP). SAML est principalement conçu pour le single sign-on (SSO) et est couramment utilisé en entreprise pour permettre aux collaborateurs d’accéder à de nombreuses applications web avec un seul jeu d’identifiants. Il est aussi utilisé pour fournir de l’authentification fédérée entre plusieurs domaines.
Même si OAuth et SAML offrent des fonctionnalités similaires, OAuth est aujourd’hui bien plus répandu grâce à sa simplicité, sa flexibilité et sa meilleure prise en charge des nouveaux usages, comme les applications web (SPA) et mobiles. Depuis plusieurs années, l’écosystème autour d’OAuth et, plus globalement, autour de la gestion des jetons JWT s’enrichit grâce au support de nombreux composants (proxy, gateway, etc.), ce qui rend parfois SAML plus coûteux à intégrer faute d’écosystème.
Processus d’enregistrement d’un client
Avant qu’un client puisse accéder aux ressources d’un utilisateur via OAuth2, les développeurs de l’application doivent d’abord l’enregistrer auprès du serveur d’autorisation. Le processus d’enregistrement peut varier selon le propriétaire du serveur d’autorisation, mais comprend au minimum les étapes suivantes :
- Enregistrement du client : le client s’enregistre auprès du serveur d’autorisation en fournissant des informations le concernant, comme le client ID, le client secret et les redirect URIs.
- Validation par le propriétaire du serveur d’autorisation : le propriétaire du serveur d’autorisation examine la demande d’enregistrement et l’approuve ou la refuse.
- Authentification du client : le client s’authentifie pour la première fois auprès du serveur d’autorisation à l’aide du client ID et du client secret.

Le plus souvent, les redirect URIs et le client sont différents pour chaque environnement (développement, recette, production) afin que le client ne puisse accéder aux ressources de l’utilisateur que depuis des environnements précis. En tant que développeur, vous pouvez donc être amené à répéter le processus d’enregistrement pour chaque environnement.
Lexique
Définissons quelques termes clés utilisés dans OAuth 2.0 :
- Resource Owner (propriétaire de la ressource) : l’entité qui possède les ressources auxquelles l’application tierce souhaite accéder. Il s’agit généralement de l’utilisateur.
- Resource Server (serveur de ressources) : le serveur qui héberge les ressources auxquelles l’application tierce souhaite accéder.
- Client : l’application tierce qui souhaite accéder aux ressources de l’utilisateur.
- Authorization Server (serveur d’autorisation) : le serveur qui délivre des access tokens au client une fois que l’utilisateur s’est authentifié et a autorisé la demande.
- Access Token : un jeton délivré par le serveur d’autorisation, que le client utilise pour accéder aux ressources de l’utilisateur.
- Scope : un paramètre qui définit le niveau d’accès du client aux ressources de l’utilisateur.
- Grant Type : la méthode utilisée par le client pour obtenir un access token auprès du serveur d’autorisation. La spécification OAuth2 définit plusieurs grant types, comme authorization code, implicit, client credentials et resource owner password credentials.