Anmeldung in einem verknüpften Konto

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

Die Anmeldung über ein verknüpftes Konto ermöglicht die Anmeldung über One Tap mit Google für Nutzer, die ihr Google-Konto bereits mit Ihrem Dienst verknüpft haben. So können sich Nutzer mit nur einem Klick anmelden, ohne ihren Nutzernamen und ihr Passwort noch einmal eingeben zu müssen. Außerdem sinkt die Wahrscheinlichkeit, dass Nutzer bei Ihrem Dienst doppelte Konten erstellen.

Voraussetzungen

Damit Sie die Anmeldung über ein verknüpftes Konto implementieren können, müssen die folgenden Anforderungen erfüllt sein:

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

Funktionsweise

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

  1. Sie können während der Anmeldung per One Tap die Anzeige verknüpfter Konten aktivieren.
  2. Dem Nutzer wird eine Aufforderung zur Anmeldung mit One Tap angezeigt, mit der er sich mit seinem verknüpften Konto in Ihrem Dienst anmelden kann.
  3. Wenn der Nutzer mit dem verknüpften Konto fortfahren möchte, sendet Google eine Anfrage an Ihren Token-Endpunkt, um einen Autorisierungscode zu speichern. Die Anfrage enthält das vom Nutzer in Ihrem Dienst ausgestellte Zugriffstoken und einen Google-Autorisierungscode.
  4. Sie tauschen den Google-Autorisierungscode gegen ein Google-ID-Token ein, das Informationen zum Google-Konto des Nutzers enthält.
  5. Ihre App erhält auch ein ID-Token, wenn der Ablauf abgeschlossen ist. Sie gleichen dieses mit der Nutzer-ID im ID-Token ab, das von Ihrem Server empfangen wurde, um den Nutzer in Ihrer App anzumelden.
Anmeldung über verknüpftes Konto
Abbildung 1. Anmeldevorgang für verknüpftes Konto Wenn der Nutzer auf seinem Gerät mit mehreren Konten angemeldet ist, wird ihm möglicherweise eine Kontoauswahl angezeigt. Er wird nur dann zur Anmeldeseite des verknüpften Kontos weitergeleitet, wenn er ein verknüpftes Konto auswählt.

Anmeldung über verknüpftes Konto in Ihrer Android-App implementieren

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

Autorisierungscodeanfragen von Google verarbeiten

Google sendet eine POST-Anfrage an Ihren Token-Endpunkt, 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 prüfen, ob Sie Google das Zugriffstoken erteilt haben, das durch das client_id gekennzeichnet ist.

HTTP-Anfrage

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-Austauschendpunkt muss die folgenden Anfrageparameter verarbeiten können:

Token-Endpunktparameter
code Erforderlich: Google OAuth2-Autorisierungscode
client_id Erforderliche Client-ID, die Sie an Google ausgegeben haben
client_secret Erforderlich: Clientschlüssel, den Sie für Google ausgestellt haben
access_token Erforderlich: Zugriffstoken, das Sie für Google ausgestellt haben. Damit wird der Kontext des Nutzers abgerufen.
grant_type Der Wert Erforderlich MUSS auf urn:ietf:params:oauth:grant-type:reciprocal festgelegt sein.

Dein Token-Austausch-Endpunkt sollte auf die POST-Anfrage reagieren. Gehe dazu so vor:

  • Prüfen Sie, ob der access_token, der durch den client_id identifiziert wird, an Google gewährt wurde.
  • Antworten Sie entweder mit einer HTTP-200-Antwort (OK), wenn die Anfrage gültig ist und der Authentifizierungscode erfolgreich gegen ein Google-ID-Token eingetauscht wurde, oder mit einem HTTP-Fehlercode, wenn die Anfrage ungültig ist.

HTTP-Antwort

Abgeschlossen

HTTP-Statuscode 200 OK zurückgeben

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

Fehler

Bei einer ungültigen HTTP-Anfrage antworten Sie mit einem der folgenden HTTP-Fehlercodes:

HTTP-Statuscode Text Beschreibung
400 {"error": "invalid_request"} Der Anfrage fehlt ein Parameter, sodass der Server die Anfrage nicht bearbeiten kann. Dieser Fehler kann auch zurückgegeben werden, wenn die Anfrage einen nicht unterstützten Parameter enthält oder einen Parameter wiederholt.
401 {"error": "invalid_request"} Die Clientauthentifizierung ist fehlgeschlagen, z. B. wenn die Anfrage eine ungültige Client-ID oder ein ungültiges Secret enthält.
401 {"error": "invalid_token"}

Fügen Sie die Authentifizierungsanfrage „WWW-Authentication: Bearer“ in den Antwortheader ein.

Das Partnerzugriffstoken ist ungültig.
403 {"error": "insufficient_permission"}

Authentifizierungsanfrage „WWW-Authentication: Bearer“ im Antwortheader einschließen

Das Partnerzugriffstoken enthält nicht die erforderlichen Bereiche für die OAuth-Wechselseitigkeit.
500 {"error": "internal_error"} Serverfehler

Die Fehlerantwort sollte die folgenden Felder enthalten :

Felder für Fehlerantworten
error Erforderlich – Fehlerstring
error_description Eine menschenlesbare Beschreibung des Fehlers
error_uri URI mit weiteren Informationen zum Fehler
Beispiel für eine 400-Fehlerantwort
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 gegen ID-Token austauschen

Sie müssen den erhaltenen Autorisierungscode gegen ein Google-ID-Token eintauschen, das Informationen zum Google-Konto des Nutzers enthält.

Wenn du einen Autorisierungscode gegen ein Google-ID-Token eintauschen möchtest, ruf den Endpunkt https://oauth2.googleapis.com/token auf und lege die folgenden Parameter fest:

Anfragefelder
client_id Erforderlich: Die Client-ID, die Sie auf der Seite „Anmeldedaten“ der API Console erhalten haben. Das sind in der Regel die Anmeldedaten mit dem Namen Neue Aktionen in der Google App.
client_secret Erforderlich: Der Clientschlüssel, der auf der Seite „Anmeldedaten“ der API Console abgerufen wurde.
code Erforderlich: Der Autorisierungscode, der in der ursprünglichen Anfrage gesendet wurde.
grant_type Erforderlich Gemäß der OAuth 2.0-Spezifikation muss der Wert dieses Felds 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 antwortet auf diese Anfrage mit einem JSON-Objekt, das ein kurzlebiges Zugriffstoken und ein Aktualisierungstoken enthält.

Die Antwort enthält die folgenden Felder:

Antwortfelder
access_token Von Google ausgestelltes Zugriffstoken, das von Ihrer Anwendung gesendet wird, um eine Google API-Anfrage zu autorisieren
id_token Das ID-Token enthält die Google-Kontoinformationen des Nutzers. Im Abschnitt Antwort prüfen finden Sie Details dazu, wie Sie die ID-Token-Antwort decodieren und prüfen.
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 „Anmeldung über verknüpftes Konto“ immer auf „openid“ festgelegt.
token_type Der zurückgegebene Tokentyp. 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

ID-Token-Antwort validieren