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

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.

Nutzer Google App / Browser Ihr Autorisierungs- Endpunkt 1. Nutzer initiiert die Verknüpfung 2. Weiterleitung zum Autorisierungsendpunkt (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 Ablauf für die Google-Kontoverknüpfung.

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:

  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 weiter.
  3. 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:

  1. Anfrage validieren:

    • Prüfen Sie, ob die client_id mit der Google zugewiesenen Client-ID übereinstimmt.
    • Prüfen Sie, ob die redirect_uri mit 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_type gleich 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 Registrierungsablauf zu durchlaufen.
  3. Zugriffstoken generieren:

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

    • Leiten Sie den Browser zur URL weiter, die in redirect_uri angegeben ist.
    • Hängen Sie die folgenden Parameter im 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.