web-dev-qa-db-fra.com

OAuth 2 access_token vs OpenId Connect id_token

Bien que j'aie travaillé avec OAuth 2 auparavant, je suis un débutant à Open ID Connect.

En lisant les didacticiels et les documentations que j'ai rencontrés à la fois access_token et id_tokenaccess_token est la chaîne unique aléatoire générée selon OAuth = 2 et id_token est JSON Web Token qui contient des informations telles que l'ID de l'utilisateur, l'algorithme, l'émetteur et diverses autres informations qui peuvent être utilisées pour le valider. J'ai également vu des fournisseurs d'API qui fournir à la fois access_token et id_token et pour autant que je sache, c'est pour une compatibilité descendante.

Ma question est que est-il possible d'utiliser à la fois access_token et id_token pour accéder aux ressources protégées? Ou est-ce que id_token est juste à des fins de vérification et access_token est utilisé pour avoir accès aux ressources protégées?

28
ajaybc

À l'origine, OAuth et OpenId sont conçus à des fins différentes: OpenId pour l'authentification et OAuth pour l'autorisation. OpenId Connect est une unification des deux et sert pour les deux, mais ne change pas leurs fonctionnalités d'origine. En gardant cela à l'esprit, vous devriez pouvoir vous découvrir. ;-)

L'id_token est utilisé pour identifier l'utilisateur authentifié, par ex. pour SSO. Le access_token doit être utilisé pour prouver les droits d'accès aux ressources protégées, par ex. pour le point de terminaison userinfo dans OpenId Connect.

40
Zólyomi István

access_token est utile pour appeler certaines API dans Auth0 (par exemple/userinfo) ou une API que vous définissez dans Auth0.

id_token est un JWT et représente l'utilisateur connecté. Il est souvent utilisé par votre application.

est-il possible d'utiliser à la fois access_token et id_token pour accéder aux ressources protégées?

Pas complètement, d'abord, vous devez utiliser id_token pour vous connecter,
Deuxièmement, vous obtiendrez un accessToken,
enfin, utilisez accessToken pour accéder aux données.

2
Yang

Un autre angle pour apporter une réponse:

id_token

  • Un id_token est un JWT - notez-le!
  • Il contient des déclarations sur l'identité de l'utilisateur/propriétaire de la ressource
  • Avoir un id_token valide signifie que l'utilisateur est authentifié

jeton d'accès

  • Un access_token est un jeton porteur
  • Un jeton porteur signifie que le porteur peut accéder à la ressource sans autre identification
  • Un access_token peut être un JWT (voir l'annexe point 1) ou opaque

Si vous voulez en savoir plus: Types de jetons dans oidc et oauth

0
human

Voici un article qui explique pourquoi l'id_token a été introduit et quel était son objectif initial: Pourquoi nous avons besoin d'un id_token dans OpenID Connect et Facebook Connect . En bref, ils ont essayé de standardiser le Hybrid Flow utilisé par Facebook.

Nous avons pensé utiliser id_token comme access_token. Nous avons rejeté cette option car:

  • De nombreux fournisseurs ont des formats de jetons OAuth pour ces points de terminaison qui seraient difficiles à modifier.
  • Nous ne voulons pas que les jetons d'accès à long terme soient stockés dans le navigateur sous forme de cookies.
  • Il y a clairement des destinataires distincts des deux jetons, surcharger la sémantique des deux jetons réduirait la flexibilité et augmenterait la complexité à long terme.
0
Sergey Ponomarev