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.
- Sie können während der Anmeldung per One Tap die Anzeige verknüpfter Konten aktivieren.
- 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.
- 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.
- Sie tauschen den Google-Autorisierungscode gegen ein Google-ID-Token ein, das Informationen zum Google-Konto des Nutzers enthält.
- 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](https://developer.android.com/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=de)
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 denclient_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