OpenID vs OAuth
July 3, 2024
Pour garantir la sécurité des informations des utilisateurs et permettre aux applications tierces d'accéder à des ressources restreintes, deux technologies principales ont émergé : OpenID Connect et OAuth. Bien que ces deux technologies soient souvent discutées ensemble, elles diffèrent fondamentalement dans leur positionnement fonctionnel et leurs objectifs principaux.
Concrètement, OAuth se concentre sur la construction d'un cadre d'autorisation, son objectif principal étant d'accorder aux applications tierces la permission d'accéder à des ressources spécifiques, sans impliquer directement la vérification de l'identité de l'utilisateur. En revanche, OpenID Connect est précisément positionné comme un service d'authentification d'identité, comblant le vide laissé par OAuth dans le domaine de la reconnaissance d'identité, et garantissant l'authenticité et la fiabilité des identités des utilisateurs.
Dans ce blog, nous allons approfondir l'essence, les mécanismes de fonctionnement, les scénarios d'application typiques, ainsi que la relation subtile mais étroite entre OpenID Connect et OAuth.
Qu'est-ce qu'OpenID Connect ?
OpenID Connect (OIDC) est un protocole d'authentification basé sur le cadre OAuth 2.0, qui étend les fonctionnalités d'OAuth en introduisant le concept de jeton d'identité (ID token). OIDC permet non seulement aux utilisateurs d'autoriser des applications tierces à accéder à leurs ressources, mais fournit également une vérification des informations d'identité de l'utilisateur, permettant un accès sécurisé à plusieurs services en utilisant une seule information d'identification.
Par rapport à OAuth 2.0, la différence principale d'OIDC est l'ajout d'une couche d'authentification, tandis qu'OAuth 2.0 se concentre principalement sur l'autorisation, permettant aux utilisateurs de contrôler les permissions d'accès des applications tierces à leurs ressources, sans impliquer la vérification spécifique de l'identité de l'utilisateur.
Le processus d'authentification OpenID Connect :
-
Accéder à l'application : Lorsqu'un utilisateur souhaite utiliser une application ou un service, si l'application a besoin de vérifier l'identité de l'utilisateur, celui-ci sera redirigé vers le fournisseur de services d'authentification d'identité, OpenID Connect provider (OP) pour se connecter.
-
Connexion de l'utilisateur : L'utilisateur entre son nom d'utilisateur et son mot de passe (ou passe par d'autres mécanismes d'authentification supportés par l'OP) sur l'interface de connexion de l'OP. Une fois que l'utilisateur s'est connecté avec succès, le fournisseur OpenID Connect confirmera l'identité de l'utilisateur.
-
Émission du jeton d'identité : Après avoir confirmé l'identité de l'utilisateur, le fournisseur OpenID Connect générera un jeton spécial appelé jeton d'identité (ID token). Ce jeton contient les informations d'identité de l'utilisateur, telles que le nom d'utilisateur, l'adresse e-mail et d'autres données clés, assurant la représentation numérique et la transmission de l'identité de l'utilisateur.
-
Utilisation du jeton d'identité : Après avoir obtenu le jeton d'identité, l'utilisateur peut le présenter à l'application qu'il souhaitait initialement accéder. L'application activera alors le mécanisme de vérification pour vérifier le jeton et confirmer qu'il a été émis par un fournisseur OpenID Connect de confiance et qu'il n'a pas expiré.
-
Accéder à l'application : Une fois que l'application a vérifié la validité du jeton d'identité, elle permettra à l'utilisateur d'accéder aux ressources ou services protégés. De cette manière, l'utilisateur n'a pas besoin de s'inscrire et de se connecter séparément à chaque application, mais peut utiliser le jeton d'identité émis par le fournisseur OpenID Connect.
-
Assurance de sécurité : OpenID Connect utilise la technologie avancée JSON Web Token (JWT) pour générer et vérifier les jetons, atténuant efficacement les risques de falsification et de vol de données. De plus, OpenID Connect supporte également de manière flexible plusieurs modes d'authentification et d'autorisation, tels que le mode code d'autorisation, le mode implicite et le mode hybride, pour s'adapter aux exigences de sécurité de différents scénarios.
Qu'est-ce qu'OAuth ?
En bref, OAuth est un protocole qui permet aux applications tierces d'accéder à des ressources sensibles stockées par l'utilisateur (comme des bibliothèques de photos, des listes de contacts, etc.) sur un autre service, sans accéder directement aux informations d'identification de connexion de l'utilisateur (nom d'utilisateur et mot de passe). Ce mécanisme est plus orienté vers "l'autorisation" que vers "l'authentification".
Par exemple, si vous souhaitez utiliser votre compte Google pour vous connecter à une application de nouvelles, l'application peut utiliser OAuth pour demander vos informations publiques (comme l'avatar et le pseudonyme) à partir de votre compte Google, sans que vous ayez besoin de fournir directement le nom d'utilisateur et le mot de passe du compte Google à l'application de nouvelles.
Le processus d'autorisation OAuth :
-
Demande d'autorisation de l'utilisateur : Supposons que vous utilisez une application sociale qui souhaite accéder à des informations de votre compte sur un autre réseau social. Cependant, ces informations sont protégées, donc une autorisation est nécessaire.
-
Redirection vers le serveur d'autorisation : L'application tierce redirigera votre demande vers une page sur un serveur d'autorisation, qui vous demandera généralement de vous connecter au service que vous souhaitez autoriser.
-
Connexion et autorisation de l'utilisateur : Sur la page du serveur d'autorisation, vous devez vous connecter avec votre compte. Après la connexion, la page vous demandera si vous acceptez que l'application tierce accède à vos informations.
-
Émission du jeton d'accès par le serveur d'autorisation : Si vous acceptez, le serveur d'autorisation générera un "passe" spécial appelé jeton d'accès. Ce jeton est comme un laissez-passer temporaire qui permet à l'application tierce d'accéder à vos informations pendant une période donnée.
-
Utilisation du jeton d'accès par l'application tierce : Une fois que l'application tierce a obtenu le jeton d'accès, elle peut utiliser ce jeton pour demander vos informations pendant une période donnée. Chaque fois qu'elle fait une demande, elle doit présenter ce jeton pour prouver qu'elle a été autorisée par vous.
-
Vérification du jeton et retour de la ressource par le serveur d'autorisation : Lorsque l'application tierce présente le jeton d'accès au serveur d'autorisation qui stocke vos informations, le serveur d'autorisation vérifiera si le jeton est valide. S'il est valide, il permettra à l'application tierce d'accéder aux informations correspondantes en fonction des permissions du jeton.
En adoptant l'approche OAuth, non seulement la sécurité de votre compte est grandement améliorée, car il n'est plus nécessaire de révéler directement votre nom d'utilisateur et votre mot de passe à l'application tierce, mais cela fournit également un mécanisme d'autorisation flexible qui vous permet de décider indépendamment quelles applications peuvent accéder à quelles informations, permettant ainsi un contrôle précis du flux de vos informations personnelles.
Les différences et les liens entre OpenID Connect et OAuth
Les différences et les liens entre OpenID Connect et OAuth sont particulièrement visibles dans les applications pratiques. Supposons qu'il existe un site web en ligne pour animaux de compagnie appelé "Pet Paradise", où les clients peuvent acheter des fournitures pour animaux, et le magasin pour animaux propose également une application de suivi de la santé des animaux où les clients peuvent enregistrer les données de santé de leur animal, telles que le poids, l'alimentation et l'état de vaccination.
Application d'OpenID Connect dans ce cas d'utilisation :
-
Authentification : Lorsque les clients visitent pour la première fois le site web "Pet Paradise" ou téléchargent et utilisent l'application de suivi de la santé des animaux, ils doivent s'inscrire et se connecter. Pour fournir une expérience de connexion pratique, le magasin pour animaux décide d'utiliser OpenID Connect pour implémenter l'authentification unique (SSO).
-
Jeton d'identité : Les clients peuvent utiliser leurs informations d'identification d'autres services supportant OpenID Connect (comme des comptes de réseaux sociaux) pour se connecter. Une fois la connexion réussie, le fournisseur OpenID Connect émettra un jeton d'identité au client. Ce jeton contient les informations d'identité du client et est chiffré et signé.
-
Authentification inter-services : Si le client visite plus tard d'autres services du magasin pour animaux (par exemple, du site web à l'application), il peut directement utiliser le jeton d'identité précédemment obtenu pour l'authentification, sans avoir à ré-entrer le nom d'utilisateur et le mot de passe. Cela permet au client de passer de manière transparente entre différents services.
Application d'OAuth dans ce cas d'utilisation :
-
Autorisation d'application tierce : Supposons que "Pet Paradise" souhaite collaborer avec une application tierce appelée "Pet Diary" et permettre aux clients de synchroniser leurs enregistrements d'achat de fournitures pour animaux et leurs données de santé des animaux de "Pet Paradise" vers "Pet Diary".
-
Jeton d'accès : Pour réaliser cette fonctionnalité, "Pet Paradise" utilisera OAuth pour autoriser l'application "Pet Diary" à accéder aux données du client. Après que le client a accepté l'autorisation sur le site web "Pet Paradise", un jeton d'accès sera généré via le flux OAuth, ce qui permet à l'application "Pet Diary" d'accéder aux données spécifiques du client sur "Pet Paradise".
-
Protection des données utilisateur : Grâce à OAuth, les informations d'identification de connexion du client (nom d'utilisateur et mot de passe) ne seront pas directement exposées à l'application "Pet Diary", mais seront partagées de manière sécurisée via le jeton d'accès. Ainsi, même si l'application "Pet Diary" est attaquée, l'attaquant ne pourra pas directement obtenir les informations d'identification de connexion du client.
Résumé
En résumé, les différences et les associations entre OAuth et OpenID Connect peuvent être résumées comme suit.
-
Base et extension :
- OAuth est un cadre d'autorisation qui permet aux applications tierces d'obtenir des permissions d'accès limitées sans utiliser le nom d'utilisateur et le mot de passe de l'utilisateur.
- OpenID Connect, quant à lui, s'appuie sur la base d'OAuth 2.0 et étend ses fonctionnalités en ajoutant une couche d'authentification.
-
Jetons et authentification :
- Dans OAuth, l'accent est principalement mis sur l'autorisation, c'est-à-dire permettre aux applications d'accéder aux ressources de l'utilisateur, tandis qu'OpenID Connect se concentre davantage sur l'authentification, c'est-à-dire confirmer l'identité de l'utilisateur.
- OpenID Connect introduit le concept de jeton d'identité, qui est un JSON Web Token (JWT) contenant les informations d'identité de l'utilisateur. Ce jeton prouve non seulement l'identité de l'utilisateur, mais peut également inclure des informations de profil personnel de l'utilisateur.
-
Collaboration :
- Lorsqu'une application a besoin de vérifier l'identité de l'utilisateur et d'accéder aux ressources de l'utilisateur, OpenID Connect et OAuth peuvent travailler ensemble.
- L'utilisateur authentifie d'abord son identité via OpenID Connect, obtenant un jeton d'identité, puis l'application peut utiliser ce jeton et le flux OAuth pour obtenir la permission d'accéder aux ressources de l'utilisateur.
En résumé, OpenID Connect et OAuth sont deux protocoles d'authentification et d'autorisation complémentaires qui, ensemble, fournissent une solution d'authentification et d'autorisation sécurisée, flexible et conviviale pour les applications web et mobiles modernes.