2016-04-19 15 views
2

Ich finde die Möglichkeit, ID-Token für Google-Anmeldung für Android mit einem Go-Backend-Server-Projekt zu validieren.Validierung von Google Anmelden ID-Token in Go

Was ist die äquivalente Funktion zur Validierung von ID-Token mithilfe einer Google API-Clientbibliothek in Go?

Von dieser Seite aus auf

einen Google-API-Client-Bibliothek Abschnitt Verwenden

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

Es gibt Java und Python Beispiele und gibt es Links für PHP, ID-Token mit der Google-API-Client-Bibliothek überprüfen Knoten .js und andere Sprachen. Ich habe nach meiner Zielsprache gesucht; Gehen Sie hier

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

Allerdings fand ich nicht äquivalente Funktion für Token Validierung wie in Java und Python Beispiel. Gibt es irgendeine Funktion in Go, um so etwas zu tun?

Ich will nicht Token info Endpunkt

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

verwenden, da es möglich, Latenz und Netzwerkfehler führt. Ich möchte die Google API-Client-Bibliothek verwenden. Bitte führe mich, wo ich hinschauen soll. Diese

Antwort

5

ist, wie ich habe es https://github.com/google/google-api-go-client Bibliothek getan:

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 
} 

oauth2.Tokeninfo Objekt hat Informationen über den Benutzer. Beachten Sie, dass dies einen Anruf an https://www.googleapis.com/oauth2/v2/tokeninfo macht und ich denke, dass alle Google API Client Libraries diesen HTTP-Aufruf unter der Haube machen.

+0

Es scheint, wie wir oauth2/v3 nicht/v2 anrufen müssen und wenn wir noch auf diese URL aufrufen müssen, wie wäre es die Latenz und Netzwerk Problem vermeiden? – Ook

+0

google-api-go-client hat nicht oauth2/v3, aber v2 funktioniert gut. Ich weiß nicht, ob Sie den http-Aufruf vermeiden können. – AlexCV

3

Googles idToken ist eigentlich im JWT-Format, einem kompakten und eigenständigen JSON mit Signatur.

Siehe auch: https://jwt.io/introduction/

google-auth-Bibliothek-NodeJS des OAuth2Client.prototype.verifyIdToken die idtoken mit Googles öffentlichen Schlüssel verifizieren und ClaimSet aus dem idtoken extrahieren, ohne die tokeninfo Endpunkt aufrufen.

Ich portierte nur die VerifyIdToken-Funktion von google-auth-library-nodejs und erstellte eine Bibliothek dafür: https://github.com/futurenda/google-auth-id-token-verifier.

Verbrauch:

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) 
}