199 votes

Comment vérifier un jeton d'accès à l'API d'authentification Google ?

Comment puis-je vérifier un jeton d'accès d'authentification Google ?

J'ai besoin d'interroger Google et de demander : Le [jeton d'accès donné] est-il valable pour le compte Google [example@example.com] ?

Version courte

Il est clair qu'un jeton d'accès fourni par l'intermédiaire de l'application Google Authentication Api : : Authentification OAuth pour les applications Web peut être utilisé pour demander des données à un ensemble de services Google. La manière de vérifier si un jeton d'accès donné est valide pour un compte Google donné n'est pas claire. J'aimerais savoir comment.

Version longue

Je développe une API qui utilise l'authentification par jeton. Un jeton sera renvoyé sur présentation d'un nom d'utilisateur et d'un mot de passe valides ou sur présentation d'un jeton d'une tierce partie provenant de l'une des catégories suivantes N des services vérifiables.

L'un des services tiers sera Google, ce qui permettra à un utilisateur de s'authentifier auprès de mon service à l'aide de son compte Google. Ce service sera ensuite étendu aux comptes Yahoo, aux fournisseurs OpenID de confiance, etc.

Exemple schématique d'un accès basé sur Google :

alt text

L'entité "API" est sous mon contrôle total. L'entité "interface publique" est toute application basée sur le web ou le bureau. Certaines interfaces publiques sont sous mon contrôle, d'autres ne le seront pas et d'autres encore ne seront peut-être même jamais connues.

Je ne peux donc pas faire confiance au jeton fourni à l'API à l'étape 3. Ce jeton sera fourni avec l'adresse électronique du compte Google correspondant.

Il faut que j'interroge Google d'une manière ou d'une autre et que je demande : Ce jeton d'accès est-il valable pour example@example.com ? ?

Dans ce cas, example@example.com est l'identifiant unique du compte Google, c'est-à-dire l'adresse électronique utilisée par une personne pour se connecter à son compte Google. On ne peut pas supposer qu'il s'agit d'une adresse Gmail, car une personne peut avoir un compte Google sans avoir de compte Gmail.

La documentation de Google indique clairement comment, avec un jeton d'accès, les données peuvent être récupérées à partir d'un certain nombre de services Google. Rien ne semble indiquer comment vérifier si un jeton d'accès donné est valide en premier lieu.

Mise à jour Le jeton est valable pour tous les services Google. Je ne peux pas comparer un jeton à un service Google pour le vérifier, car je ne sais pas quel sous-ensemble de services Google un utilisateur donné utilise réellement.

En outre, je n'utiliserai jamais le jeton d'accès d'authentification de Google pour accéder aux services de Google, mais seulement pour vérifier qu'un utilisateur supposé de Google est bien celui qu'il prétend être. S'il existe un autre moyen d'y parvenir, je serai heureux d'essayer.

0voto

Google ne pourra jamais répondre à votre question, car il ne s'agit pas de savoir si ce jeton d'accès est valide. C'est jeton+secret.

0voto

Malx Points 656

Je dois en quelque sorte interroger Google et demander : ce jeton d'accès est-il valable pour example@example.com ?

Non. Il vous suffit de demander une connexion standard avec Connexion fédérée pour les utilisateurs de comptes Google de votre domaine API. Ce n'est qu'après cela que vous pourrez comparer le "persistent user ID" avec celui que vous avez dans l'"interface publique".

La valeur du domaine est utilisée sur la page Google Federated Login pour identifier le site demandeur auprès de l'utilisateur. Elle est également utilisée pour déterminer la valeur de l'identifiant persistant renvoyé par Google.

Vous devez donc appartenir au même domaine que l'"interface publique".

Et n'oubliez pas que l'utilisateur a besoin d'être sûr que votre API est fiable ;) Google demandera donc à l'utilisateur s'il vous autorise à vérifier son identité.

0voto

Jonathan Points 1032

Essayez de faire une demande authentifiée par OAuth en utilisant votre jeton à https://www.google.com/accounts/AuthSubTokenInfo . Ceci n'est documenté que pour AuthSub, mais fonctionne également pour OAuth. Il ne vous dira pas pour quel utilisateur est le jeton, mais il vous dira pour quels services il est valide, et la requête échouera si le jeton n'est pas valide ou a été révoqué.

0voto

Karl Anderson Points 1187

Un jeton d'accès OAuth arbitraire ne peut pas être utilisé pour l'authentification, car la signification du jeton est en dehors de la spécification OAuth Core. Il pourrait être destiné à un usage unique ou à une fenêtre d'expiration étroite, ou il pourrait fournir un accès que l'utilisateur ne veut pas donner. Il est également opaque, et le consommateur OAuth qui l'a obtenu pourrait ne jamais avoir vu un quelconque identifiant d'utilisateur.

Un fournisseur de services OAuth et un ou plusieurs consommateurs pourraient facilement utiliser OAuth pour fournir un jeton d'authentification vérifiable, et il existe des propositions et des idées en ce sens, mais un fournisseur de services arbitraire utilisant uniquement OAuth Core ne peut pas le faire sans une autre coordination avec un consommateur. La méthode REST AuthSubTokenInfo spécifique à Google, avec l'identifiant de l'utilisateur, est proche, mais elle ne convient pas non plus, car elle pourrait invalider le jeton, ou le jeton pourrait être expiré.

Si votre identifiant Google est un identifiant OpenId et que votre "interface publique" est une application web ou peut appeler le navigateur de l'utilisateur, vous devriez probablement utiliser l'OP OpenID de Google.

OpenID consiste simplement à envoyer l'utilisateur au PO et à recevoir en retour une assertion signée. L'interaction se fait uniquement au bénéfice du RP. Il n'existe pas de jeton à longue durée de vie ou d'autre identifiant spécifique à l'utilisateur qui pourrait être utilisé pour indiquer qu'un RP a authentifié avec succès un utilisateur auprès d'un OP.

Une façon de vérifier une authentification antérieure par rapport à un identifiant OpenID est de procéder à une nouvelle authentification, en supposant que le même user-agent est utilisé. Le PO doit pouvoir renvoyer une assertion positive sans interaction avec l'utilisateur (en vérifiant un cookie ou un certificat client, par exemple). Le PO est libre d'exiger une autre interaction de l'utilisateur, et le fera probablement si la demande d'authentification provient d'un autre domaine (mon PO me donne la possibilité de réauthentifier ce RP particulier sans interaction à l'avenir). Et dans le cas de Google, l'interface utilisateur par laquelle l'utilisateur est passé pour obtenir le jeton OAuth peut ne pas utiliser le même identifiant de session, de sorte que l'utilisateur devra s'authentifier à nouveau. Mais dans tous les cas, vous serez en mesure d'affirmer l'identité.

0voto

Sapanesh Points 111

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X