2016-04-19 2 views
2

Je trouve le moyen de valider le jeton d'identification pour la connexion Google pour Android avec un projet de serveur Go backend.Valider le jeton d'identification de connexion Google dans Go

Quelle est la fonction équivalente pour valider les jetons d'identification à l'aide d'une bibliothèque de clients API Google dans Go?

A partir de cette page sur En utilisant une section API Google Client Library

https://developers.google.com/identity/sign-in/android/backend-auth#using-a-google-api-client-library

Il y a Java et des exemples Python et il y a des liens pour vérifier les jetons d'identité avec l'API Google Client Library pour PHP, Noeud .js, et d'autres langues. J'ai vérifié ma langue cible; Rendez-vous ici

https://github.com/google/google-api-go-client/blob/master/GettingStarted.md

Cependant, je ne trouvai pas de fonction équivalente pour la validation de jeton comme dans l'exemple Java et Python. Y a-t-il une fonction dans Go pour faire une telle chose?

Je ne veux pas utiliser endpoint info jeton

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

car il introduit la latence possible et une erreur de réseau. Je souhaite utiliser Google API Client Library. S'il vous plaît me guider où devrais-je regarder.

Répondre

5

Voilà comment je l'ai fait en utilisant la bibliothèque https://github.com/google/google-api-go-client:

import (
    "google.golang.org/api/oauth2/v2" 
    "net/http" 
) 

var httpClient = &http.Client{} 

func verifyIdToken(idToken string) (*oauth2.Tokeninfo, error) { 
    oauth2Service, err := oauth2.New(httpClient) 
    tokenInfoCall := oauth2Service.Tokeninfo() 
    tokenInfoCall.IdToken(idToken) 
    tokenInfo, err := tokenInfoCall.Do() 
    if err != nil { 
     return nil, err 
    } 
    return tokenInfo, nil 
} 

objet oauth2.Tokeninfo a des infos sur l'utilisateur. Notez que cela fait un appel à https://www.googleapis.com/oauth2/v2/tokeninfo et je pense que toutes les bibliothèques de clients API Google font cet appel http sous le capot.

+0

Il semble que nous devons appeler oauth2/v3 pas/v2 et si nous avons encore besoin de faire appel à cette URL, comment serait-il éviter le problème de la latence et le réseau? – Ook

+0

google-api-go-client n'a pas oauth2/v3, mais v2 fonctionne bien. Je ne sais pas si vous pouvez éviter l'appel http. – AlexCV

3

idToken de Google est réellement au format JWT, qui est compact et autonome JSON avec signature.

Voir aussi: https://jwt.io/introduction/

de google-auth-bibliothèque-nodejs OAuth2Client.prototype.verifyIdToken vérifier la idtoken utilisant la clé publique de Google et extraire ClaimSet du idtoken sans appeler le point final tokeninfo.

Je viens de porter la fonction verifyIdToken de google-auth-library-nodejs et j'ai créé une bibliothèque pour cela: https://github.com/futurenda/google-auth-id-token-verifier.

Utilisation:

import (
    "github.com/futurenda/google-auth-id-token-verifier" 
) 

v := googleAuthIDTokenVerifier.Verifier{} 
aud := "xxxxxx-yyyyyyy.apps.googleusercontent.com" 
err := v.VerifyIDToken(TOKEN, []string{ 
    aud, 
}) 
if err == nil { 
    claimSet, err := googleAuthIDTokenVerifier.Decode(TOKEN) 
    // claimSet.Iss,claimSet.Email ... (See claimset.go) 
}