it-swarm.com.de

Google OAuth API zum Abrufen der E-Mail-Adresse des Benutzers?

Ich spiele mit OAuth 2.0 Playground von Google mit meinem eigenen Google-Konto. Ich kann meine Gmail-Adresse jedoch nicht über den Spielplatz wiederherstellen.

Mein Anwendungsbereich ist:

email profile https://www.googleapis.com/auth/plus.login

Aber wenn ich die API anrufe:

https://www.googleapis.com/oauth2/v2/userinfo

Ich erhalte verschiedene Informationen über den Benutzer, wie Familienname, Vorname, Geschlecht, Bild usw., aber die E-Mail des Benutzers wird nicht zurückgegeben.

Wie rufe ich die E-Mail-Adresse des Benutzers ab? Habe ich den falschen Bereich oder rufe ich die falsche API auf? Ich denke, dies sollte sehr einfach sein, aber ich habe buchstäblich versucht, dies stundenlang herauszufinden, und ich kann keine Kombination aus API und Bereich finden, die die E-Mail-Adresse des Benutzers konsistent liefert.

36
RevolutionTech

Update: Dezember 2018

Am 20. Dezember kündigte Google an, dass die Google+ API im März 2019 abgelehnt werden würde. Ab Ende Januar 2019 kam es zu zeitweiligen Ausfällen. Im Rahmen des der plus.people.get-Endpunkt ist veraltet und soll terminiert werden.

Der userinfo-Endpunkt wird nicht mehr empfohlen (siehe Erläuterung) und sollte die Informationen bereitstellen

  1. Sie fordern den https://developers.google.com/identity/sign-in/web/devconsole-project-Bereich und an
  2. Sie fordern das Feld email an.

Klarstellung: 24. Januar 2019

Google dokumentiert , dass der Userinfo (v2) -Endpunkt veraltet war, er jedoch später in "veraltet, aber aus Gründen der Rückwärtskompatibilität verfügbar" geändert wurde.

Aktuelle Dokumentation behandelt das Abrufen von Profil- und E-Mail-Informationen über die derzeit unterstützte openid-Methode. Dies beinhaltet die Verwendung des Endpunkts "userinfo", der in ihrem Discovery-Dokument angegeben ist, wie von OpenID Connect erforderlich.

Im Moment ist diese URL https://openidconnect.googleapis.com/v1/userinfo, dies hat sich jedoch in der Vergangenheit geändert, und das Ermittlungsdokument bei https://accounts.google.com/.well-known/openid-configuration ist die maßgebliche Quelle für die zu verwendende URL.

Um klar zu sein:

  • Die alte Userinfo-URL wird aus Gründen der Abwärtskompatibilität beibehalten
  • Die neue Userinfo-URL ist im Discovery-Dokument verfügbar

Unabhängig davon ist die Plus-Version von etwas (unten beschrieben) nicht mehr empfohlen und sollte [ ] entfernt werden.

Ursprüngliche Antwort

Hier gibt es viele Probleme, was Sie tun und wie Sie es versuchen.

Für den Anfang ist der https://www.googleapis.com/oauth2/v2/userinfo-Endpunkt veraltet und soll im September 2014 entfernt werden. Er arbeitet inkonsistent - verwenden Sie ihn also nicht.

Wie @ abraham feststellt, verwenden Sie den Endpunkt people.get unter https://www.googleapis.com/plus/v1/people/me. Dies sollte Ihnen das Feld emails mit einem Array von Adressen geben. In Ihrem Fall gibt es wahrscheinlich nur einen, der eine Art "Konto" hat.

45
Prisoner

Ab 2017: Verwenden Sie den Bereich email. Siehe API-Anforderungen autorisieren .

Dieser email -Bereich entspricht dem .__ und ersetzt diesen. https://www.googleapis.com/auth/userinfo.email scope.

 enter image description here

40
turdus-merula

Sie möchten den Bereich https://www.googleapis.com/auth/userinfo.email hinzufügen oder https://www.googleapis.com/oauth2/v2/userinfo damit ersetzen. Wenn Sie das HTML-Beispiel verwenden, das sie bereitstellen, können Sie mehrere durch Leerzeichen getrennte Bereiche auflisten.

<span
  class="g-signin"
  data-callback="signInCallback"
  data-clientid="{{ plus_id }}"
  data-cookiepolicy="single_Host_Origin"
  data-requestvisibleactions="http://schemas.google.com/AddActivity"
  data-scope="https://www.googleapis.com/auth/plus.login   
  https://www.googleapis.com/auth/userinfo.email">
</span>
10
Tom

Ich kam hierher und suchte, warum mein Server keine E-Mail als Antwort auf den Aufruf/oauth2/v2/userinfo api erhalten hat. Ich habe das nur einmal gesehen und es hat in der Vergangenheit gut funktioniert. 

Die Antwort gab gute Hinweise. Bei der Behebung dieses Problems gab es mehrere andere Ressourcen, die hilfreich waren. Ich bin immer noch nicht sicher, ob es in Ordnung ist, immer E-Mails in der Antwort zu erwarten. Setzen Sie die Fehlerbehandlung in Code, falls E-Mails nicht zurückgegeben werden.

  1. Google-API-Dokumentation über Migration zu Google + Anmelden .
  2. https://www.googleapis.com/auth/userinfo.email Umfang
  3. Personenressource Dokumentation
  4. Fügen Sie dem Projekt google + api mithilfe der google Entwicklerkonsole hinzu. Die kostenlose Anzahl (Anrufe) ist recht hoch (20m für Google + Anmelden in einem API pro Tag).
  5. Fügen Sie Fehlerbehandlung und Protokollierung im Servercode hinzu, falls api keine E-Mails zurückgibt. In meinem Fall habe ich nur die E-Mail-Adresse "type" gesucht. 
6
Sushil

Um sich bei Google mit OAuth 2.0 anzumelden, müssen Sie keine gesonderte Anfrage stellen, um die E-Mail des Benutzers zu erhalten. 

Wenn Google die Rückruf-URL aufruft, wird in der Abfragezeichenfolge eine code angegeben, die Sie für den Austausch eines Zugriffstokens und eines ID-Tokens verwenden könnten. Das ID-Token ist eine JWT, die Identitätsinformationen über den Benutzer enthält, einschließlich der E-Mail-Adresse.

Weitere Informationen finden Sie hier: https://developers.google.com/identity/protocols/OpenIDConnect

3
Chen Pang

Dies ist eigentlich eine kleine Herausforderung, da Google standardmäßig keine E-Mails bereitstellt. Sie müssen es ausdrücklich von Google Plus anfordern.

const scope = [
  'https://www.googleapis.com/auth/plus.me', // request access here
  'https://www.googleapis.com/auth/userinfo.email',
];

auth.generateAuthUrl({
  access_type: 'offline',
  Prompt: 'consent',
  scope: scope,
});

const plus = google.plus({ version: 'v1', auth });
const me = await plus.people.get({ userId: 'me' });
const userEmail = me.data.emails[0].value;

Es gibt eine Vollversion in diesem Blogpost, die ich geschrieben habe: https://medium.com/@jackscott/how-to-use-google-auth-api-with-node-js-888304f7e3a0

2
Jack

Ich habe die Antwort von Prisoner rechts oben befolgt und sie hat mir geholfen ... bis ich die E-Mail von Google Developers erhalten habe, wie Google API am 7. März 2019 heruntergefahren wird.

Ich suchte herum und fand diese Lösung, um die E-Mail mit einem id_token abzurufen, der zurückgegeben wird, wenn Sie eine App mit dem email-Bereich in Ihrer Entwicklerkonsole autorisieren.

Von Google-Anmeldung für Websites :

Um ein ID-Token in PHP zu überprüfen, verwenden Sie die Google API-Clientbibliothek für PHP. Installieren Sie die Bibliothek (z. B. mit Composer):

composer require google/apiclient

Rufen Sie dann die Funktion verifyIdToken () auf. Zum Beispiel:

require_once 'vendor/autoload.php';

// Get $id_token via HTTPS POST.

$client = new Google_Client(['client_id' => $CLIENT_ID]);  // Specify the CLIENT_ID of the app that accesses the backend
$payload = $client->verifyIdToken($id_token);
if ($payload) {
  $userid = $payload['sub'];
  // If request specified a G Suite domain:
  //$domain = $payload['hd'];
} else {
  // Invalid ID token
}

Dadurch wird ein Array mit den Benutzerinformationen zurückgegeben, das auch die E-Mail-Adresse des angemeldeten Benutzers enthält. Hoffe, das hilft allen anderen.

1
NxKai

Ändern Sie den authorizationRequest mit dem angegebenen Bereich: scope=openid%20email%20profile und benutze userinfoapi. Dieser Link hat bei mir funktioniert

0
Saghi

https://developers.google.com/gmail/api/v1/reference/users/getProfile

Fügen Sie für gmails api Folgendes zum nodejs-Code hinzu: 

function getUsersEmail (auth) {
  const gmail = google.gmail({version: 'v1', auth})
  gmail.users.getProfile({
    userId: 'me'
  }, (err, {data}) => {
    if (err) return console.log('The API returned an error: ' + err)
    console.log(data.emailAddress)
  })
}

Gmails-API: https://developers.google.com/gmail/api/guides/

0