Comprendre les jetons d'accès, les jetons de rafraîchissement et les jetons d'identité dans le protocole OpenID Connect (OIDC)
Le protocole OpenID Connect (OIDC) est devenu une norme largement adoptée pour la gestion des identités. Mais comprenez-vous vraiment les rôles et les attributs de ces jetons ?
OIDC, OAuth 2.0 et jetons
Le protocole OpenID Connect, également connu sous le nom d'OIDC, est devenu une norme largement adoptée pour fournir un cadre fondamental pour la gestion des identités. C'est une couche d'authentification construite sur le bien connu protocole OAuth 2.0. Alors qu'OAuth 2.0 est uniquement destiné à l'autorisation des ressources, l'OIDC est le protocole qui standardise et renforce l'authentification des clients, avec l'aide du nouveau jeton d'identité introduit.
Attendez... vous avez peut-être entendu parler des jetons d'accès et des jetons de rafraîchissement à l'époque d'OAuth, et maintenant voici le nouveau concept dans l'OIDC ? Comprenez-vous vraiment les différences entre ces jetons ?
Que sont les jetons d'accès, les jetons de rafraîchissement et un jeton d'identité dans l'OIDC ?
Commençons par un scénario pratique.
Imaginez que vous développez une application client-serveur typique, et qu'ils communiquent entre eux via des API RESTful. Vous souhaitez garder la plupart de vos API privées, ne permettant l'accès qu'aux clients autorisés. Vous aurez besoin d'un mécanisme pour authentifier le client et autoriser les requêtes API sur votre serveur.
Idéalement, vos API RESTful devraient être sans état, ce qui signifie que le serveur ne devrait pas stocker d'informations de session client. Chaque fois qu'une requête valide arrive, le serveur devrait simplement répondre avec les données demandées. C'est là que les jetons entrent en jeu. Donc, quel type de jeton devez-vous utiliser dans ce cas ?
Les jetons d'accès sont utilisés pour protéger vos APIs
Dans OAuth 2.0 et l'OIDC, chaque API protégée est traitée comme une ressource. Le jeton d'accès est le jeton que le client transmet au serveur lors de la demande de ressource API, généralement via l'en-tête de requête et au format JWT.
Du côté serveur, chaque fois qu'une requête arrive, le serveur doit seulement valider si la requête entrante comporte un jeton d'accès valide. Le processus de validation inclut généralement le décodage du jeton JWT, la vérification de la signature et du temps d'expiration, ainsi que la revendication de portée pour s'assurer que le client dispose des autorisations nécessaires.
Cependant, vous pourriez vous demander : si mon application cliente peut avoir un jeton d'accès valide après une connexion réussie et utiliser le jeton d'accès pour demander des APIs au serveur, est-ce que cela ne suffit pas ? Pourquoi ai-je besoin des autres jetons?
En effet, une question valable, et expliquons-la étape par étape.
Pourquoi avons-nous besoin de jetons de rafraîchissement ?
Bien que techniquement, les jetons d'accès répondent aux exigences minimales pour faire fonctionner le système, cependant, en raison de préoccupations de sécurité, la validité des jetons d'accès est généralement très courte (généralement une heure). Alors imaginez que nous ayons uniquement des jetons d'accès, les utilisateurs finaux devront se réauthentifier chaque fois que le jeton d'accès expire. Pour les applications web monopage modernes (SPA) et surtout les applications mobiles, se déconnecter fréquemment est une expérience utilisateur plutôt douloureuse, même si nous essayons seulement de protéger leur sécurité.
Par conséquent, nous avons besoin d'un équilibre entre la sécurité des jetons et la commodité des utilisateurs. C'est pourquoi les jetons de rafraîchissement ont été introduits.
Pourquoi les jetons de rafraîchissement peuvent-ils avoir une durée de vie plus longue ?
Les jetons d'accès sont utilisés pour accéder aux ressources API, donc leur nature de courte durée aide à atténuer le risque de fuite ou de compromission. D'autre part, puisque les jetons de rafraîchissement sont uniquement utilisés pour échanger de nouveaux jetons d'accès, ils ne sont pas utilisés aussi fréquemment que les jetons d'accès et donc le risque d'exposition est réduit. Par conséquent, avoir une plus longue période de validité est considéré comme acceptable pour les jetons de rafraîchissement.
Assurer la sécurité des jetons de rafraîchissement
Puisque le jeton de rafraîchissement est également stocké côté client, assurer leur non-compromission est difficile, surtout pour les clients publics tels que les applications web monopage (SPA) et les applications mobiles.
Dans Logto, les jetons de rafraîchissement ont un mécanisme automatique de rotation activé par défaut, ce qui signifie que le serveur d'autorisation émettra un nouveau jeton de rafraîchissement une fois qu'il répond aux critères suivants:
- Applications monopage : Reconnu comme clients non contraints expéditeurs, ces applications nécessitent la rotation de jeton de rafraîchissement. La durée de vie (TTL) du jeton de rafraîchissement ne peut pas être spécifiée.
- Applications natives et applications web traditionnelles : La rotation du jeton de rafraîchissement est intrinsèquement activée, se renouvelant automatiquement lors de l'atteinte de 70% de sa durée de vie (TTL). En savoir plus
Bien que vous ayez encore la possibilité de désactiver la rotation du jeton de rafraîchissement sur la page des détails de l'application dans la console d'administration, il est fortement recommandé de conserver cette mesure de protection.
Qu'est-ce qu'un jeton d'identité et pourquoi est-il important ?
Le jeton d'identité est une fonctionnalité unique de l'OIDC qui fournit des informations d'identité sur l'utilisateur authentifié.
Alors que les jetons d'accès sont utilisés pour accéder aux ressources protégées et les jetons de rafraîchissement sont utilisés pour obtenir de nouveaux jetons d'accès, les jetons d'identité sont généralement utilisés pour mettre en cache les informations utilisateur côté client, réduisant ainsi le besoin de faire des demandes supplémentaires au serveur d'autorisation pour les données utilisateur. Dans la plupart des cas, il est même sûr de dire qu'avoir le jeton d'identité équivaut à ce que l'utilisateur soit authentifié.
Bonnes pratiques pour la gestion des jetons
- Utiliser HTTPS : Utilisez toujours HTTPS pour sécuriser la communication entre le client et le serveur d'autorisation. Cela empêche les parties non autorisées d'intercepter et de voler les jetons.
- Définir un temps d'expiration de jeton approprié : Les jetons d'accès doivent avoir une courte durée de vie pour minimiser le risque d'exposition. Les jetons de rafraîchissement peuvent avoir une période de validité plus longue.
- Activer la rotation des jetons de rafraîchissement : Implémentez la rotation des jetons de rafraîchissement pour atténuer le risque de fuite de jetons de rafraîchissement.
- Utiliser un contrôle d'accès granulaire : Utilisez des portées granulaires pour limiter les permissions des jetons d'accès. Ne demandez que les permissions nécessaires pour l'application cliente. Évitez d'utiliser les portées "toutes" ou "admin" pour contourner la plupart des vérifications de permissions sauf si cela est absolument nécessaire.
Récapitulatif : Différences clés des jetons d'accès, des jetons de rafraîchissement et des jetons d'identité dans l'OIDC
Dans le protocole OIDC, les jetons de rafraîchissement, les jetons d'accès et les jetons d'identité travaillent ensemble pour fournir une authentification utilisateur sécurisée et transparente.
- Les jetons d'accès fournissent l'autorisation d'accéder aux ressources protégées.
- Les jetons de rafraîchissement éliminent l'intervention de l'utilisateur pour les nouveaux jetons d'accès.
- Les jetons d'identité fournissent des informations utilisateur mises en cache sur le client, améliorant les performances.
Comprendre le rôle et l'importance de ces jetons est crucial pour les développeurs implémentant l'authentification OIDC dans leurs applications.