Anmeldung im verknüpften Konto

Mit der Google-Kontoverknüpfung können Inhaber von Google-Konten schnell, nahtlos und sicher eine Verbindung zu Ihren Diensten herstellen und Daten mit Google teilen.

Durch die Anmeldung über ein verknüpftes Konto können Nutzer, die bereits ihr Google-Konto mit dem Dienst verknüpft haben, die Funktion Über Google antippen aktivieren. So können sich die Nutzer mit einem Klick anmelden, ohne ihren Nutzernamen und ihr Passwort noch einmal eingeben zu müssen. Außerdem verringern Sie die Wahrscheinlichkeit, dass Nutzer doppelte Konten für Ihren Dienst erstellen.

Voraussetzungen

Wenn Sie sich mit einem verknüpften Konto anmelden möchten, müssen Sie die folgenden Anforderungen erfüllen:

  • Sie haben eine OAuth-Verknüpfung für ein Google-Konto, die den OAuth 2.0-Vorgang mit Autorisierungscode unterstützt. Ihre OAuth-Implementierung muss die folgenden Endpunkte enthalten:
    • Autorisierungsendpunkt für die Verarbeitung von Autorisierungsanfragen
    • Token-Endpunkt zum Verarbeiten von Anfragen für Zugriffs- und Aktualisierungstokens
    • userinfoendpunkt, um grundlegende Kontoinformationen zu dem verknüpften Nutzer abzurufen, die dem Nutzer während der Anmeldung angezeigt werden.
  • Sie haben eine Android-App.

Funktionsweise

Voraussetzung : Der Nutzer hat sein Google-Konto bereits mit seinem Konto bei Ihrem Dienst verknüpft.

  1. Sie können verknüpfte Konten bei der Anmeldung über One Tap aktivieren.
  2. Der Nutzer sieht dann eine Aufforderung zur Anmeldung über One Tap mit der Option, sich mit seinem verknüpften Konto in Ihrem Dienst anzumelden.
  3. Wenn der Nutzer mit dem verknüpften Konto fortfahren möchte, sendet Google eine Anfrage zum Speichern eines Autorisierungscodes an Ihren Tokenendpunkt. Die Anfrage enthält das von Ihrem Dienst ausgestellte Zugriffstoken des Nutzers sowie einen Google-Autorisierungscode.
  4. Sie tauschen den Google-Autorisierungscode gegen ein Google-ID-Token aus, das Informationen über das Google-Konto des Nutzers enthält.
  5. Ihre App erhält außerdem ein ID-Token, wenn der Vorgang abgeschlossen ist. Sie werden mit der User-ID im ID-Token abgeglichen, das Sie von Ihrem Server erhalten haben, um den Nutzer in der App anzumelden.
Verknüpftes Konto – Anmeldung.
Abbildung 1: Vorgang für die Anmeldung mit einem verknüpften Konto. Wenn der Nutzer mehrere angemeldete Konten auf seinem Gerät hat, wird ihm möglicherweise eine Kontoauswahl angezeigt. Er wird nur zu der Ansicht für verknüpfte Konten weitergeleitet, wenn er ein verknüpftes Konto auswählt.

Verknüpftes Konto in der Android-App anmelden

Um die Anmeldung über verknüpfte Konten in Ihrer Android-App zu unterstützen, folgen Sie der Anleitung im Implementierungsleitfaden für Android.

Anfragen von Autorisierungscodes von Google verarbeiten

Google sendet eine POST-Anfrage an Ihren Tokenendpunkt, um einen Autorisierungscode zu speichern, den Sie gegen das ID-Token des Nutzers eintauschen. Die Anfrage enthält das Zugriffstoken des Nutzers und einen von Google ausgestellten OAuth2-Autorisierungscode.

Bevor Sie den Autorisierungscode speichern, müssen Sie bestätigen, dass Sie das Zugriffstoken erhalten haben, das Sie Google zugewiesen haben (ID von client_id).

HTTP-Request

Beispielanfrage

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

Der Token-Exchange-Endpunkt muss die folgenden Anfrageparameter verarbeiten können:

Parameter-Endpunktparameter
code Erforderlich Google OAuth2-Autorisierungscode
client_id Erforderliche Client-ID, die Sie Google ausgestellt haben
client_secret Erforderlich den Clientschlüssel, den Sie an Google gesendet haben
access_token Erforderlich Zugriffstoken, das Sie an Google gesendet haben. Damit kannst du den Kontext des Nutzers abrufen
grant_type Erforderlich Wert muss auf urn:ietf:params:oauth:grant-type:reciprocal festgelegt sein

Der Endpunkt für den Tokenaustausch sollte auf die POST-Anfrage reagieren. Gehen Sie dazu so vor:

  • Prüfen Sie, ob Google die access_token gewährt hat, die durch die client_id identifiziert wurden.
  • Antworte entweder, wenn die Anfrage gültig ist und der Authentifizierungscode erfolgreich gegen ein Google-ID-Token eingetauscht wurde, entweder mit der HTTP-Antwort „200 (OK)“ oder mit einer HTTP-Fehlermeldung, wenn die Anfrage ungültig ist.

HTTP-Antwort

Erfolg

HTTP-Statuscode 200 zurückgeben

Beispiel für eine erfolgreiche Antwort
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Fehler

Geben Sie bei einer ungültigen HTTP-Anfrage einen der folgenden HTTP-Fehlercodes an:

HTTP-Statuscode Körper Beschreibung
400 {"error": "invalid_request"} In der Anfrage fehlt ein Parameter, sodass der Server die Anfrage nicht verarbeiten kann. Sie können auch zurückgegeben werden, wenn die Anfrage einen nicht unterstützten Parameter enthält oder einen Parameter wiederholt.
401 {"error": "invalid_request"} Clientauthentifizierung fehlgeschlagen, z. B. wenn die Anfrage eine ungültige Client-ID oder ein ungültiges Secret enthält
401 {"error": "invalid_token"}

Mit &WWW-Authentifizierung: Inhaber-Authentifizierungsanforderung in den Antwortheader einschließen

Das Partner-Zugriffstoken ist ungültig.
403 {"error": "insufficient_permission"}

Mit &WWW-Authentifizierung: Inhaber-Authentifizierungsanforderung in den Antwortheader einschließen

Der Partnerzugriffstoken enthält nicht die erforderlichen Bereiche, um das rechte OAuth auszuführen
500 {"error": "internal_error"} Serverfehler

Die Fehlermeldung sollte die folgenden Felder enthalten :

Felder für Fehlerantworten
error Erforderlich Fehlerstring
error_description Für Menschen lesbare Beschreibung des Fehlers
error_uri URI mit weiteren Informationen zum Fehler
Beispiel für einen Fehler 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

Autorisierungscode der Anzeigenplattform für das ID-Token

Als Nächstes müssen Sie den Autorisierungscode gegen ein Google-ID-Token eintauschen, der Informationen über das Google-Konto des Nutzers enthält.

Um einen Autorisierungscode für ein Google-ID-Token auszutauschen, rufen Sie den Endpunkt https://oauth2.googleapis.com/token auf und legen Sie die folgenden Parameter fest:

Anfragefelder
client_id Erforderlich die Client-ID von der Seite Anmeldedaten der API-Konsole. Dies sind in der Regel die Anmeldedaten mit dem Namen New Actions on Google App.
client_secret Erforderlich der Clientschlüssel, der von der Seite „Anmeldedaten“ der API Console abgerufen wurde
code Erforderlich den Autorisierungscode, der in der ersten Anfrage gesendet wurde
grant_type Erforderlich Wie in der OAuth 2.0-Spezifikation definiert, muss dieser Wert auf authorization_code gesetzt werden.
Beispielanfrage
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

Google reagiert auf diese Anfrage, indem er ein JSON-Objekt zurückgibt, das ein kurzlebiges Zugriffstoken und ein Aktualisierungstoken enthält.

Die Antwort umfasst die folgenden Felder:

Antwortfelder
access_token Von Google ausgestelltes Zugriffstoken, das Ihre Anwendung zur Autorisierung einer Google API-Anfrage sendet
id_token Das ID-Token enthält die Google-Kontoinformationen des Nutzers. Der Abschnitt Antwort validieren enthält Details zum Decodieren und Überprüfen der ID-Tokenantwort.
expires_in Die verbleibende Lebensdauer des Zugriffstokens in Sekunden
refresh_token Ein Token, mit dem Sie ein neues Zugriffstoken abrufen können. Aktualisierungstokens sind gültig, bis der Nutzer den Zugriff widerruft
scope Der Wert dieses Felds ist für den Anwendungsfall „Verknüpftes Konto – Anmeldung“ immer auf „idid“ festgelegt.
token_type Der Typ des zurückgegebenen Tokens. Derzeit ist der Wert dieses Felds immer auf Bearer festgelegt
Beispielantwort
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

Antwort des ID-Tokens validieren

Überprüfen und dekodieren Sie die JWT-Zusicherung

Sie können die JWT-Zusicherung validieren und decodieren, indem Sie eine JWT-Decodierungsbibliothek für Ihre Sprache verwenden . Verwenden Sie die öffentlichen Schlüssel von Google, die in den Formaten JWK oder PEM verfügbar sind, um die Signatur des Tokens zu überprüfen.

Beim Dekodieren sieht die JWT-Zusicherung wie folgt aus:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

Stellen Sie neben der Überprüfung der Signatur des Tokens sicher, dass der Aussteller der Assertion (Feld iss ) https://accounts.google.com , dass die Zielgruppe (Feld aud ) Ihre zugewiesene Client-ID ist und das Token nicht abgelaufen ist ( exp Feld).

Anhand der Felder email , email_verified und hd können Sie feststellen, ob Google eine E-Mail-Adresse hostet und für diese maßgeblich ist. In Fällen, in denen Google autorisierend ist, ist der Nutzer derzeit als legitimer Kontoinhaber bekannt, und Sie können das Passwort oder andere Herausforderungsmethoden überspringen. Andernfalls können diese Methoden verwendet werden, um das Konto vor dem Verknüpfen zu überprüfen.

Fälle, in denen Google maßgeblich ist:

  • email hat @gmail.com Suffix @gmail.com . Dies ist ein Google Mail-Konto.
  • email_verified ist true und hd ist festgelegt. Dies ist ein G Suite-Konto.

Benutzer können sich für Google-Konten registrieren, ohne Google Mail oder G Suite zu verwenden. Wenn email kein @gmail.com Suffix enthalten und hd fehlt, ist Google nicht autorisierend. Zur Überprüfung des Benutzers werden Kennwörter oder andere @gmail.com empfohlen. email_verfied kann auch wahr sein, da Google den Nutzer bei der email_verfied des Google-Kontos zunächst überprüft hat. Der Besitz des E-Mail-Kontos eines Drittanbieters hat sich jedoch möglicherweise seitdem geändert.