Français
  • jeton
  • oidc
  • jeton de rafraîchissement
  • jeton d'accès
  • jeton d'ID

Comprendre les jetons d'accès, les jetons de rafraîchissement et les jetons d'ID 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 ?

Charles
Charles
Developer

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. Il s'agit d'une couche d'authentification construite sur le célèbre protocole OAuth 2.0. Alors que OAuth 2.0 est simplement utilisé pour l'autorisation de ressources, l'OIDC est le protocole qui standardise et renforce l'authentification des clients, avec l'aide du nouveau jeton d'ID 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 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'ID dans OIDC ?

Commençons par un scénario pratique.

Imaginez que vous développez une application client-serveur typique, et qu'elles communiquent entre elles via des API RESTful. Vous souhaitez garder la plupart de vos API privées, ne permettant qu'aux clients autorisés d'y accéder. Vous aurez besoin d'un mécanisme pour authentifier le client et autoriser les requêtes d'API à votre serveur.

Idéalement, vos APIs 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. Alors, quel type de jeton devriez-vous utiliser dans ce cas ?

Les jetons d'accès sont utilisés pour protéger vos API

Dans OAuth 2.0 et 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 la demande et au format JWT.

Côté serveur, chaque fois qu'une requête arrive, le serveur ne doit valider que si la demande entrante porte 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 vérification de la revendication d'étendue 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 les API du serveur, cela ne suffit-il pas ? Pourquoi ai-je besoin des autres jetons ?

En effet, une question légitime, expliquons-la étape par étape.

Pourquoi avons-nous besoin des jetons de rafraîchissement ?

Bien que techniquement les jetons d'accès répondent aux exigences minimales pour faire fonctionner le système, 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). Donc imaginez si nous n'avons que 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 modernes à page unique (SPA) et particulièrement les applications mobiles, se déconnecter fréquemment est une expérience utilisateur assez pénible, même si nous essayons simplement de protéger leur sécurité.

Nous avons donc 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 d'être divulgué ou compromis. D'autre part, puisque les jetons de rafraîchissement ne sont utilisés que pour échanger de nouveaux jetons d'accès, ils ne sont pas utilisés aussi fréquemment que les jetons d'accès et le risque d'exposition est donc réduit. Par conséquent, il est considéré comme acceptable d'avoir une période de validité plus longue pour les jetons de rafraîchissement.

Assurer la sécurité du jeton de rafraîchissement

Étant donné que le jeton de rafraîchissement est également stocké du côté du client, assurer leur non-compromission est un défi, 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 de rotation automatique 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 : Reconnues comme des clients non contraints par l'expéditeur, ces applications nécessitent une rotation des jetons de rafraîchissement. Le temps de vie (TTL) du jeton de rafraîchissement ne peut être spécifié.
  • Applications natives et applications web traditionnelles : La rotation des jetons de rafraîchissement est intrinsèquement activée, se renouvelant automatiquement lorsqu'elle atteint 70 % de son TTL. En savoir plus sur la rotation des jetons de rafraîchissement dans Logto

Bien que vous ayez toujours la possibilité de désactiver la rotation des jetons de rafraîchissement sur la page de 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'ID et pourquoi est-il important ?

Le jeton d'ID est une caractéristique 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 que les jetons de rafraîchissement sont utilisés pour obtenir de nouveaux jetons d'accès, les jetons d'ID sont généralement utilisés pour mettre en cache les informations utilisateur du côté client, réduisant ainsi le besoin de faire des requêtes supplémentaires au serveur d'autorisation pour les données utilisateur. Dans la plupart des cas, on peut même dire qu'avoir le jeton d'ID équivaut à l'utilisateur étant authentifié.

Meilleures pratiques pour gérer les jetons

  • Utilisez 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 le temps d'expiration approprié du jeton : Les jetons d'accès doivent avoir une durée de vie courte 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 du jeton de rafraîchissement.
  • Utilisez un contrôle d'accès granulaire : Utilisez des portées granulaires pour limiter les autorisations des jetons d'accès. Ne demandez que les autorisations nécessaires à l'application cliente. Évitez d'utiliser des portées "tout" ou "admin" pour contourner la plupart des vérifications d'autorisation, sauf si cela est absolument nécessaire.

Récapitulatif : Principales différences des jetons d'accès, des jetons de rafraîchissement et des jetons d'ID dans OIDC

Dans le protocole OIDC, les jetons de rafraîchissement, les jetons d'accès, et les jetons d'ID fonctionnent ensemble pour fournir une authentification utilisateur sécurisée et transparente.

  • Les jetons d'accès fournissent une autorisation pour accéder aux ressources protégées.
  • Les jetons de rafraîchissement éliminent l'intervention de l'utilisateur pour obtenir de nouveaux jetons d'accès.
  • Les jetons d'ID fournissent des informations utilisateur mises en cache du côté client, améliorant les performances.

Comprendre le rôle et l'importance de ces jetons est crucial pour les développeurs mettant en œuvre une authentification OIDC dans leurs applications.