login ändern - Wie identifiziere ich einen Google OAuth2-Nutzer?




snippet title (6)

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/


Answers

Java-Version

OAuth2Sample.java


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.


"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 .


Ich habe diese Methode in google-api-php-client / src / apiClient.php eingefügt:

public function getUserInfo() 
{
    $req = new apiHttpRequest('https://www.googleapis.com/oauth2/v1/userinfo');
    // XXX error handling missing, this is just a rough draft
    $req = $this->auth->sign($req);
    $resp = $this->io->makeRequest($req)->getResponseBody();
    return json_decode($resp, 1);  
}

Jetzt kann ich anrufen:

$client->setAccessToken($_SESSION[ 'token' ]);
$userinfo = $client->getUserInfo();

Es gibt ein Array wie dieses zurück (plus E-Mail, wenn dieser Bereich angefordert wurde):

Array
(
    [id] => 1045636599999999999
    [name] => Tim Strehle
    [given_name] => Tim
    [family_name] => Strehle
    [locale] => de
)

Die Lösung stammt aus diesem Thread: https://groups.google.com/forum/#!msg/google-api-php-client/o1BRsQ9NvUQ/xa532MxegFIJ


Es sollte erwähnt werden, dass die OpenID Connect API kein id Attribut mehr zurückgibt.

Es ist jetzt das sub , das als eindeutige Benutzeridentifikation dient.

Siehe Google Dev OpenID Connect UserInfo


In meinem Fall mit Windows 7 (muss damit arbeiten: - |), das Verschieben in ein höheres Verzeichnis in dem Laufwerk, in dem sich das Laufwerk befindet, oder die Länge des Verzeichnisnamens verringern, war der Trick.







login google-api oauth-2.0