Zur Unterstützung des impliziten OAuth 2.0-Ablaufs stellt Ihr Dienst einen Autorisierungsendpunkt per HTTPS zur Verfügung. Dieser Endpunkt ist für die Authentifizierung und die Einholung der Einwilligung von Nutzern für den Datenzugriff verantwortlich. Der Autorisierungsendpunkt präsentiert Nutzern, die noch nicht angemeldet sind, eine Anmeldeoberfläche und erfasst die Einwilligung für den angeforderten Zugriff.
Wenn eine Google-Anwendung eine der autorisierten APIs Ihres Dienstes aufrufen muss, verwendet Google diesen Endpunkt, um die Berechtigung von Ihren Nutzern zu erhalten, diese APIs in ihrem Namen aufzurufen.
Google-Kontoverknüpfung: Impliziter OAuth-Ablauf
Das folgende Sequenzdiagramm beschreibt die Interaktionen zwischen dem Nutzer, Google und den Endpunkten Ihres Dienstes.
Rollen und Verantwortlichkeiten
In der folgenden Tabelle sind die Rollen und Verantwortlichkeiten der Akteure im impliziten OAuth-Ablauf für die Google-Kontoverknüpfung (GAL) definiert. Bei der GAL fungiert Google als der OAuth Client, während Ihr Dienst als der Identitäts-/Dienstanbieter fungiert.
| Akteur / Komponente | GAL-Rolle | Verantwortlichkeiten |
|---|---|---|
| Google App / Server | OAuth-Client | Initiiert den Ablauf, empfängt das Zugriffstoken über eine Browserweiterleitung, und speichert es sicher, um auf die APIs Ihres Dienstes zuzugreifen. |
| Ihr Autorisierungsendpunkt | Autorisierungsserver | Authentifiziert Ihre Nutzer, holt ihre Einwilligung ein und stellt Google direkt langlebige Zugriffstokens aus. |
| Google-Weiterleitungs-URI | Callback-Endpunkt | Empfängt die Nutzerweiterleitung von Ihrem Autorisierungsdienst mit den
access_token und state Werten im URL
Fragment. |
Eine typische implizite OAuth 2.0-Ablaufsitzung, die von Google initiiert wird, läuft so ab:
- Google öffnet Ihren Autorisierungsendpunkt im Browser des Nutzers. Der Nutzer meldet sich an, falls er noch nicht angemeldet ist, und erteilt Google die Berechtigung, mit Ihrer API auf seine Daten zuzugreifen, falls er die Berechtigung noch nicht erteilt hat.
- Ihr Dienst erstellt ein Zugriffstoken und gibt es an Google zurück. Leiten Sie dazu den Browser des Nutzers mit dem Zugriffstoken, das an die Anfrage angehängt ist, zurück zu Google weiter.
- Google ruft die APIs Ihres Dienstes auf und hängt jeder Anfrage das Zugriffstoken an. Ihr Dienst prüft, ob das Zugriffstoken Google die Autorisierung für den Zugriff auf die API gewährt, und schließt dann den API-Aufruf ab.
Implementierungsrezept
Führen Sie die folgenden Schritte aus, um den impliziten Ablauf zu implementieren.
Schritt 1: Autorisierungsanfragen verarbeiten
Wenn Google die Kontoverknüpfung initiiert, wird der Nutzer zu Ihrem Autorisierungsendpunkt weitergeleitet. Ausführliche Protokollverträge und Parameteranforderungen finden Sie unter dem Autorisierungsendpunkt.
So verarbeiten Sie die Anfrage:
Anfrage validieren:
- Prüfen Sie, ob die
client_idmit der Google zugewiesenen Client-ID übereinstimmt. - Prüfen Sie, ob die
redirect_urimit der erwarteten Google-Weiterleitungs URL:none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_IDübereinstimmt - Prüfen Sie, ob
response_typegleichtokenist.
- Prüfen Sie, ob die
Nutzer authentifizieren:
- Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist.
- Wenn der Nutzer nicht angemeldet ist, fordern Sie ihn auf, den Anmelde- oder Registrierungsablauf zu durchlaufen.
Zugriffstoken generieren:
- Erstellen Sie ein eindeutiges, nicht erratbares Zugriffstoken, das mit dem Nutzer und dem Client verknüpft ist.
Zurück zu Google weiterleiten:
- Leiten Sie den Browser zur URL weiter, die in
redirect_uriangegeben ist. - Hängen Sie die folgenden Parameter im URL-Fragment (Hash) an:
access_token: Das von Ihnen generierte Zugriffstoken.token_type: Mussbearersein.state: Der unveränderte Statuswert, der von Google empfangen wurde.
- Leiten Sie den Browser zur URL weiter, die in
userinfo-Anfragen verarbeiten
Der userinfo-Endpunkt ist eine geschützte OAuth 2.0-Ressource, die Ansprüche über den verknüpften Nutzer zurückgibt. Die Implementierung und das Hosten des userinfo-Endpunkts sind mit Ausnahme der folgenden Anwendungsfälle optional:
- Anmeldung in einem verknüpften Konto über Google One Tap.
- Reibungsloses Abo auf Android TV
Nachdem das Zugriffstoken erfolgreich von Ihrem Tokenendpunkt abgerufen wurde, sendet Google eine Anfrage an Ihren userinfo-Endpunkt, um grundlegende Profilinformationen über den verknüpften Nutzer abzurufen.
| Anfrageheader für userinfo-Endpunkt | |
|---|---|
Authorization header |
Das Zugriffstoken vom Typ „Bearer“. |
Wenn Ihr userinfo-Endpunkt beispielsweise unter
https://myservice.example.com/userinfo, kann eine Anfrage so aussehen:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Führen Sie die folgenden Schritte aus, damit der userinfo-Endpunkt Anfragen verarbeiten kann:
- Extrahieren Sie das Zugriffstoken aus dem Autorisierungs-Header und geben Sie Informationen für den Nutzer zurück, der mit dem Zugriffstoken verknüpft ist.
- Wenn das Zugriffstoken ungültig ist, gib den Fehler „HTTP 401 Unauthorized“ mit dem Antwortheader
WWW-Authenticatezurück. Hier ist ein Beispiel für eine Userinfo-Fehlerantwort: Wenn während des Verknüpfungsvorgangs der Fehler „401 Nicht autorisiert“ oder eine andere fehlgeschlagene Fehlermeldung zurückgegeben wird, kann der Fehler nicht behoben werden. Das abgerufene Token wird verworfen und der Nutzer muss den Verknüpfungsvorgang noch einmal starten.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Wenn das Zugriffstoken gültig ist, geben Sie eine HTTP 200-Antwort mit dem folgenden JSON-Objekt im Text des HTTPS-Objekts zurück. Antwort:
Wenn der userinfo-Endpunkt eine HTTP 200-Erfolgsantwort zurückgibt, werden das abgerufene Token und die Anforderungen im Google-Konto des Nutzers registriert.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }Userinfo-Endpunktantwort subEine eindeutige ID, die den Nutzer in Ihrem System identifiziert. emailE-Mail-Adresse des Nutzers given_nameOptional:Vorname des Nutzers. family_nameOptional:Nachname des Nutzers. nameOptional:Vollständiger Name des Nutzers. pictureOptional:Profilbild des Nutzers.