Google-Kontoverknüpfung mit OAuth (impliziter Vorgang – archiviert)

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.

Nutzer Google-App / Browser Ihr Auth-Endpunkt 1. Nutzer initiiert Verknüpfung 2. Weiterleitung zum Autorisierungs-Endpunkt (GET) client_id, redirect_uri, state, scope 3. Anmelde- und Einwilligungsbildschirm anzeigen 4. Nutzer authentifiziert sich und erteilt die Einwilligung 5. Mit Token zurück zu Google weiterleiten (GET) access_token, state 6. Nutzertokens speichern 7. Auf Nutzerressourcen zugreifen
Abbildung 1. Die Abfolge der Ereignisse im impliziten OAuth 2.0-Vorgang für die Google-Kontoverknüpfung.

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:

  1. 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.
  2. 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.
  3. 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:

  1. Anfrage validieren:

    • Prüfen Sie, ob die client_id mit der Client-ID übereinstimmt, die Google zugewiesen ist.
    • Prüfen Sie, ob redirect_uri mit 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_type token ist.
  2. 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.
  3. Zugriffstoken generieren:

    • Erstellen Sie ein eindeutiges, nicht erratbares Zugriffstoken, das dem Nutzer und dem Client zugeordnet ist.
  4. Zurück zu Google weiterleiten:

    • Leiten Sie den Browser zur URL in redirect_uri weiter.
    • Hängen Sie die folgenden Parameter an das URL-Fragment (Hash) an:
      • access_token: Das von Ihnen generierte Zugriffstoken.
      • token_type: Muss bearer sein.
      • state: Der unveränderte Statuswert, der von Google empfangen wurde.
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:

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:

  1. 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.
  2. Wenn das Zugriffstoken ungültig ist, gib den Fehler „HTTP 401 Unauthorized“ mit dem Antwortheader WWW-Authenticate zurück. Hier ist ein Beispiel für eine Userinfo-Fehlerantwort:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    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.
  3. 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:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    Wenn der userinfo-Endpunkt eine HTTP 200-Erfolgsantwort zurückgibt, werden das abgerufene Token und die Anforderungen im Google-Konto des Nutzers registriert.

    Userinfo-Endpunktantwort
    sub Eine eindeutige ID, die den Nutzer in Ihrem System identifiziert.
    email E-Mail-Adresse des Nutzers
    given_name Optional:Vorname des Nutzers.
    family_name Optional:Nachname des Nutzers.
    name Optional:Vollständiger Name des Nutzers.
    picture Optional:Profilbild des Nutzers.