Comment puis-je vérifier un jeton d’access à l’API d’authentification Google?

Comment puis-je vérifier un jeton d’access à l’authentification Google?

Je dois en quelque sorte interroger Google et demander: Est-ce que [jeton d’access donné] est valide pour le compte Google [exemple@exemple.com]?

Version courte :
Il est clair que les jetons d’access fournis via l’ authentification Google Authentication Api :: OAuth pour les applications Web peuvent être utilisés pour demander des données à divers services Google. Il n’est pas clair comment vérifier si un jeton d’access donné est valide pour un compte Google donné. J’aimerais savoir comment.

Version longue :
Je développe une API qui utilise une authentification basée sur des jetons. Un jeton sera renvoyé sur présentation d’un nom d’utilisateur + mot de passe valide ou de la fourniture d’un jeton tiers à partir de l’un des N services vérifiables.

L’un des services tiers sera Google, permettant à un utilisateur de s’authentifier auprès de mon service via son compte Google. Cela sera plus tard étendu aux comptes Yahoo, aux fournisseurs OpenID de confiance, etc.

Exemple schématique d’access basé sur Google:

alt text http://soffr.miximages.com/web-services/auth_figure002.png

L’entité ‘API’ est sous mon contrôle total. L’entité “interface publique” est une application Web ou de bureau. Certaines interfaces publiques sont sous mon contrôle, d’autres ne le seront pas et d’autres encore je ne le saurai peut-être jamais.

Par conséquent, je ne peux pas faire confiance au jeton fourni à l’API à l’étape 3. Il sera fourni avec l’adresse e-mail du compte Google correspondante.

Je dois en quelque sorte interroger Google et demander: Ce jeton d’access est-il valide pour exemple@exemple.com ?

Dans ce cas, exemple@exemple.com est l’identifiant unique du compte Google – l’adresse e-mail que quelqu’un utilise pour se connecter à son compte Google. Cela ne peut pas être supposé être une adresse Gmail – quelqu’un peut avoir un compte Google sans avoir un compte Gmail.

La documentation de Google indique clairement comment, avec un jeton d’access, les données peuvent être extraites d’un certain nombre de services Google. Rien ne semble indiquer comment vérifier si un jeton d’access donné est valide en premier lieu.

Mise à jour Le jeton est valable pour N services Google. Je ne peux pas essayer un jeton contre un service Google pour le vérifier, car je ne saurai pas quel sous-ensemble de tous les services Google est utilisé par un utilisateur donné.

En outre, je n’utiliserai jamais le jeton d’access à l’authentification Google pour accéder à des services Google, simplement pour vérifier si un utilisateur supposé de Google est effectivement ce qu’il est. S’il y a une autre façon de faire, je suis heureux d’essayer.

Pour la vérification de l’utilisateur, postez simplement le jeton d’access comme accessToken et publiez-le pour obtenir la réponse.

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=accessToken 

vous pouvez également essayer dans la barre d’adresse des navigateurs, utiliser également httppost et la réponse dans Java

réponse sera comme

 { "issued_to": "xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", "audience": "xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", "user_id": "xxxxxxxxxxxxxxxxxxxxxxx", "scope": "https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com", "expires_in": 3340, "access_type": "offline" } 

La scope est la permission donnée de accessToken. vous pouvez vérifier les identificateurs de scope dans ce lien

 function authenticate_google_OAuthtoken($user_id) { $access_token = google_get_user_token($user_id); // get existing token from DB $redirecturl = $Google_Permissions->redirecturl; $client_id = $Google_Permissions->client_id; $client_secret = $Google_Permissions->client_secret; $redirect_uri = $Google_Permissions->redirect_uri; $max_results = $Google_Permissions->max_results; $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$access_token; $response_contacts = curl_get_responce_contents($url); $response = (json_decode($response_contacts)); if(isset($response->issued_to)) { return true; } else if(isset($response->error)) { return false; } } 

Vous pouvez vérifier un jeton d’access à l’authentification Google à l’aide de ce noeud final:

 https://www.googleapis.com/oauth2/v3/tokeninfo?access_token= 

Ceci est le sharepoint terminaison de validation de Google V3 OAuth AccessToken, vous pouvez vous référer au document de google ci-dessous: (Dans l’ OAUTH 2.0 ENDPOINTS )

https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token