2016-04-17 5 views
15

ich erfolgreich erhalten haben Google-Anmeldetoken aus meinem Android App auf meinem Webserver in Go läuft auf GAE geschrieben. Ich möchte nicht diePakage zur Überprüfung Google-Anmeldetoken in Go auf GAE laufen

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

verwenden, da sie die Frage über Latenz und potentielle Netzwerkfehler haben davor gewarnt, auf Google-Anmelde Integration Führungs Seite. Also ich finde den Weg Google API-Client-Bibliothek für Go zu verwenden, und ich fand diese

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

Ich fand, dass es komplizierter ist als die Java und Python Google API-Client-Bibliothek, die ich brauchen würde, um nur die GoogleIdTokenVerifier nennen method oder verify_id_token-Funktion, um die Informationen des Google-Nutzers abzurufen, der sich in der Android-App angemeldet hat. Ich bin mir nicht sicher, ob ich in die richtige Richtung gehe. Bitte zeigen Sie mir, wie Sie das von der Android App erhaltene Google-Anmelde-Token überprüfen können.

+0

Welche Google API möchten Sie verwenden? –

+0

Ich möchte Google anmelden in api. Ich möchte nur das Token überprüfen, das von der Android App gesendet wurde. Der Nutzer meldet sich über die App an und die App sendet ein Token an meinen Backend-Server. – Ook

+0

Sie haben geschrieben: "Ich möchte nur zu Token von Android-App gesendet überprüfen". Dieser Satz macht keinen allzu großen Sinn. Sie möchten die Authentifizierung in Go-Server-Seite durchführen oder möchten Sie es auf Android tun? Bitte klären Sie. – Laurent

Antwort

9

Ich vor kurzem konfrontiert dieses Problem und fand zwei Lösungen.

Aber vorher müssen Sie verstehen, was Python (oder anderen empfohlenen Client-Bibliotheken) 's-Bibliothek tut.

  1. Es schlug https://www.googleapis.com/oauth2/v2/certs zu Array von öffentlichen RSA-Schlüsseln erhalten.
  2. Decode-Token.
  3. Verwendet das Feld "kid" (Schlüssel-ID) aus dem decodierten Token, um einen PEM-Schlüssel für den Abgleich des öffentlichen RSA-Schlüssels zu generieren.
  4. Überprüfen Sie die Signatur von Token (die nach dem 2. Punkt in einem JWT-Token ist) mit PEM-Schlüssel.

nun zwei Lösungen:

  1. offizielle oauth Bibliothek "google.golang.org/api/oauth2/v2"

    func getTokenInfo(idToken string) (*oauth2.Tokeninfo, error) { 
    oauth2Service, err := oauth2.New(&http.Client{}) 
    if err != nil { 
        return nil, err 
    } 
    tokenInfoCall := oauth2Service.Tokeninfo() 
    tokenInfoCall.IdToken(idToken) 
    return tokenInfoCall.Do() 
    } 
    

    Von Mit Tokeninfo Sie dieses Publikum überprüfen können (tokenInfo .Audience) und ausgegeben an (tokenInfo.IssuedTo) sind gültig. Und andere Parameter, die Sie überprüfen möchten. Aber die offizielle Bibliothek von Golang folgt nicht dem oben erwähnten Prozess. Es trifft die www.googleapis.com/oauth2/v2/tokeninfo für die Erzeugung von tokeninfo (nicht www.googleapis.com/oauth2/v3/tokeninfo. V2 gibt nicht irgendein Feld wie "Name" aber jedes Feld einschließlich eMail, die Sie muss das Token verifizieren.).

  2. Mit GoogleIdTokenVerifier-Bibliothek, die eine Portierung von Python-Bibliothek ist.

Was Sie tun können, die Effizienz des Prozesses zu verbessern, ist die certs und pem zwischenzuspeichern. Es sei denn, ein Token mit neuem "Kind" kommt, nicht die URL.

Überprüfen Sie, welcher Ansatz schneller ist. Diese Sache über Latenz kann falsch sein, da Sie Netzwerk verwenden, um Zertifikate zu erhalten.