Zur Unterstützung des impliziten OAuth 2.0-Vorgangs stellt Ihr Dienst einen Autorisierungsendpunkt über HTTPS zur Verfügung. Dieser Endpunkt ist für die Authentifizierung und die Einholung der Einwilligung von Nutzern für den Datenzugriff verantwortlich. Am Autorisierungsendpunkt wird Nutzern, die noch nicht angemeldet sind, eine Anmeldeoberfläche präsentiert und die Einwilligung zum angeforderten Zugriff wird aufgezeichnet.
Wenn eine Google-Anwendung eine der autorisierten APIs Ihres Dienstes aufrufen muss, verwendet Google diesen Endpunkt, um die Berechtigung Ihrer Nutzer zum Aufrufen dieser APIs in ihrem Namen einzuholen.
Google-Kontoverknüpfung: impliziter OAuth-Vorgang
Das folgende Sequenzdiagramm beschreibt die Interaktionen zwischen dem Nutzer, Google und den Endpunkten Ihres Dienstes.
Rollen und Verantwortlichkeiten
In der folgenden Tabelle werden die Rollen und Verantwortlichkeiten der Akteure im OAuth-Implizit-Ablauf für die Google-Kontoverknüpfung (Google Account Linking, GAL) definiert. Bei GAL fungiert Google als OAuth-Client, während Ihr Dienst als Identitäts-/Dienstanbieter fungiert.
| Akteur / Komponente | GAL-Rolle | Zuständigkeiten |
|---|---|---|
| Google App / Server | OAuth-Client | Leitet den Ablauf ein, 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 direkt an Google langlebige Zugriffstokens aus. |
| Google-Weiterleitungs-URI | Callback-Endpunkt | Empfängt die Nutzerweiterleitung von Ihrem Autorisierungsdienst mit den Werten access_token und state im URL-Fragment. |
Eine typische Sitzung mit implizitem OAuth 2.0-Vorgang, 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.
- Google ruft die APIs Ihres Dienstes auf und hängt das Zugriffstoken an jede Anfrage an. Ihr Dienst prüft, ob das Zugriffstoken Google die Autorisierung für den Zugriff auf die API gewährt, und führt dann den API-Aufruf aus.
Implementierungsschema
So implementieren Sie den impliziten Ablauf:
Schritt 1: Autorisierungsanfragen bearbeiten
Wenn Google die Kontoverknüpfung initiiert, wird der Nutzer zu Ihrem Autorisierungsendpunkt weitergeleitet. Ausführliche Protokollverträge und Parameteranforderungen finden Sie unter Autorisierungsendpunkt.
So bearbeiten Sie die Anfrage:
Anfrage validieren:
- Prüfen Sie, ob die
client_idmit der Client-ID übereinstimmt, die Google zugewiesen ist. - Prüfen Sie, ob
redirect_urimit der erwarteten Google-Weiterleitungs-URL übereinstimmt:none https://oauth-redirect.googleusercontent.com/r/YOUR_PARTNER_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PARTNER_ID - Prüfen Sie, ob
response_typetokenist.
- 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 Registrierungsvorgang abzuschließen.
Zugriffstoken generieren:
- Erstellen Sie ein eindeutiges, nicht erratbares Zugriffstoken, das dem Nutzer und dem Client zugeordnet ist.
Zurück zu Google weiterleiten:
- Leiten Sie den Browser zur URL in
redirect_uriweiter. - Hängen Sie die folgenden Parameter an das 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 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.