Autorisation OAuth 2.0
OAuth 2.0 est un framework d'autorisation qui est devenu le standard de facto pour autoriser l'accès aux ressources protégées. Il permet aux applications tierces d'accéder aux données des utilisateurs sans exposer les identifiants de l'utilisateur. Au lieu de partager des mots de passe, les services fournissent des tokens.
Contexte
Imaginez que vous souhaitiez utiliser une application tierce qui a besoin d'accéder aux données de votre compte Google. Vous ne voudriez pas fournir à cette application tierce votre nom d'utilisateur et mot de passe Google, n'est-ce pas ? C'est là qu'OAuth intervient. Il vous permet d'accorder à cette application l'accès à vos données Google sans partager vos identifiants Google.
Bases d'OAuth 2.0
OAuth 2.0 se concentre sur la simplicité pour le développeur client tout en fournissant des flux d'autorisation spécifiques pour les applications web, les applications de bureau, les téléphones mobiles et les appareils domestiques. Voici une décomposition simplifiée :
Propriétaire de la ressource : L'utilisateur qui autorise une application à accéder à son compte. L'accès de l'application au compte de l'utilisateur est limité au "scope" de l'autorisation accordée (par exemple, lecture ou écriture d'un type spécifique de données).
Client : L'application qui souhaite accéder au compte de l'utilisateur. Avant de pouvoir le faire, elle doit être autorisée par l'utilisateur et l'autorisation doit être validée par l'API.
Serveur de ressources : Le serveur hébergeant les comptes utilisateur. Il peut accepter et répondre aux requêtes de ressources protégées en utilisant des tokens d'accès.
Serveur d'autorisation : Ce serveur vérifie l'identité de l'utilisateur puis émet des tokens d'accès à l'application.
Flux OAuth 2.0
Il existe plusieurs "flux" ou "types d'autorisation" pour différents types d'applications et cas d'utilisation :
Authorization Code (pour les applications exécutées sur un serveur web) : C'est le flux le plus courant, en particulier pour les applications web. Il implique de rediriger l'utilisateur vers le service, où il se connecte. Après la connexion, il est redirigé vers l'application avec un code d'autorisation, que l'application peut échanger contre un token d'accès.
Implicit (pour les applications exécutées dans un navigateur) : Ce flux est pour les applications basées sur l'agent utilisateur (par exemple, les applications monopage) où le token d'accès est retourné immédiatement sans étape supplémentaire d'échange de code d'autorisation.
Resource Owner Password Credentials : Ce flux permet à l'application de fournir directement le nom d'utilisateur et le mot de passe de l'utilisateur. Il n'est recommandé que pour les applications de confiance, car il implique le partage des identifiants de l'utilisateur.
Client Credentials : Utilisé lorsque le client lui-même est le propriétaire de la ressource ; par exemple, lorsque le client est un service en arrière-plan.
Tokens
Au lieu d'utiliser les identifiants de l'utilisateur, OAuth 2.0 utilise des tokens. Il en existe deux types :
Token d'accès : Permet à l'application d'effectuer des requêtes API au nom de l'utilisateur. Il a une courte durée de vie.
Token de rafraîchissement : Peut être utilisé pour obtenir un nouveau token d'accès si le token d'accès original a expiré. Il a une durée de vie plus longue que le token d'accès.
Sécurité
OAuth 2.0 repose sur SSL/TLS pour la sécurité. Il garantit la confidentialité des données entre le client, le serveur d'autorisation et le serveur de ressources. Même si des attaquants parviennent à intercepter un token d'accès, ils ne peuvent pas l'utiliser au-delà de son expiration (généralement une courte durée) ou en dehors du scope pour lequel il a été émis.
Conclusion
OAuth 2.0 est un framework puissant et flexible qui permet aux applications tierces d'accéder aux données des utilisateurs sans exposer les identifiants de l'utilisateur. Il est devenu un outil essentiel du web moderne, fournissant aux utilisateurs et aux développeurs un moyen sécurisé et efficace d'accorder et de gérer les permissions entre différents services et applications.