[login] Wie identifiziere ich einen Google OAuth2-Nutzer?


2 Answers

Wie andere bereits erwähnt haben, können Sie ein GET an https://www.googleapis.com/oauth2/v1/userinfo senden, indem Sie das soeben erhaltene OAuth2-Träger-Token verwenden. Sie erhalten dann eine Antwort mit einigen Informationen über den Benutzer (id , Name usw.).

Es ist auch erwähnenswert, dass Google OpenID Connect implementiert und dass dieser Benutzer-Info-Endpunkt nur ein Teil davon ist.

OpenID Connect ist eine Authentifizierungsschicht auf OAuth2. Wenn Sie einen Autorisierungscode am Token-Endpunkt von Google austauschen, erhalten Sie ein Zugriffstoken (den Parameter access_token ) sowie ein OpenID Connect-ID-Token (den Parameter id_token ).

Beide Token sind JWT (JSON Web Token, http://tools.ietf.org/html/draft-ietf-oauth-json-web-token ).

Wenn Sie sie dekodieren, erhalten Sie einige Assertionen, einschließlich der ID des Benutzers. Wenn Sie diese ID mit einem Benutzer in Ihrer Datenbank verknüpfen, können Sie diese sofort identifizieren, ohne ein zusätzliches userinfo GET ausführen zu müssen (spart Zeit).

Wie in den Kommentaren erwähnt, sind diese Tokens mit dem privaten Schlüssel von Google signiert. Sie können die Signatur mit dem öffentlichen Schlüssel von Google ( https://www.googleapis.com/oauth2/v1/certs ) überprüfen, um sicherzustellen, dass sie authentisch sind.

Sie können sehen, was in einem JWT enthalten ist, indem Sie es unter https://jwt.io/ einfügen (scrollen Sie nach unten für den JWT-Debugger). Die Aussagen sehen so aus:

{
    "iss":"accounts.google.com",
    "id":"1625346125341653",
    "cid":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
    "aud":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
    "token_hash":"WQfLjdG1mDJHgJutmkjhKDCdA",
    "iat":1567923785,
    "exp":1350926995
}

Es gibt auch Bibliotheken für verschiedene Programmiersprachen, um JWTs programmatisch zu decodieren.

Question

Ich habe Facebook-Login verwendet, um Nutzer zu identifizieren. Wenn ein neuer Benutzer kommt, speichere ich seine Benutzer-ID in meiner Datenbank. Das nächste Mal, wenn sie kommen, habe ich ihre Facebook-ID erkannt und weiß, welcher Benutzer in meiner Datenbank ist.

Jetzt versuche ich dasselbe mit Googles OAuth2 zu tun, aber wie kann ich die Benutzer erkennen?

Google sendet mir mehrere Codes und Tokens (access_token, id_token, refresh_token), aber keine davon ist konstant. Das bedeutet, wenn ich mich abmelde und mich 2 Minuten später wieder einlogge, haben sich alle 3 Werte geändert. Wie kann ich den Benutzer eindeutig identifizieren?

Ich benutze ihre PHP-Client-Bibliothek: https://code.google.com/p/google-api-php-client/




"Wer ist das?" ist im Wesentlichen ein Dienst; Sie müssen den Zugriff darauf als Bereich anfordern und dann eine Anfrage an den Google-Profilressourcen- Server stellen , um die Identität zu erhalten. Details finden Sie unter OAuth 2.0 für Login .




JWTs können zwar lokal mit dem öffentlichen Schlüssel validiert werden (die Google APIs-Clientbibliothek lädt ihre öffentlichen Schlüssel automatisch herunter und speichert sie im Cache), wobei das Token auf der Seite von Google über den https://www.googleapis.com/oauth2/v1/tokeninfo-Endpunkt überprüft werden muss. um zu überprüfen, ob der Zugriff für die Anwendung seit der Erstellung des Tokens widerrufen wurde.




Related