Kontoverknüpfung mit OAuth

Der Typ OAuth-Verknüpfung unterstützt zwei branchenübliche OAuth 2.0-Abläufe: den impliziten und den Autorisierungscode.

Im impliziten Codeablauf öffnet Google Ihren Autorisierungsendpunkt im Browser des Nutzers. Nach erfolgreicher Anmeldung geben Sie ein langlebiges Zugriffstoken an Google zurück. Dieses Zugriffstoken ist jetzt in jeder Anfrage enthalten, die von Assistant an Ihre Aktion gesendet wird.

Für den Autorisierungscodeablauf benötigen Sie zwei Endpunkte:

  • Der Endpunkt für die Autorisierung, der für die Darstellung der Anmelde-UI für Nutzer sorgt, die noch nicht angemeldet sind, und die Einwilligung zum angeforderten Zugriff in Form eines kurzlebigen Autorisierungscodes erfasst.
  • Der Endpunkt Tokenaustausch, der für zwei Arten von Austauschen verantwortlich ist:
    1. Tauscht einen Autorisierungscode gegen ein langlebiges Aktualisierungstoken und ein kurzlebiges Zugriffstoken aus. Dieser Austausch erfolgt, wenn der Nutzer die Kontoverknüpfung durchläuft.
    2. Tauscht ein langlebiges Aktualisierungstoken gegen ein kurzlebiges Zugriffstoken aus. Dieser Austausch findet statt, wenn Google ein neues Zugriffstoken benötigt, weil das abgelaufene Token abgelaufen ist.

Der implizite Codeablauf ist zwar einfacher zu implementieren, aber Google empfiehlt, dass mit dem impliziten Vorgang ausgestellte Zugriffstokens nie ablaufen, da die Verwendung des Tokenablaufs mit dem impliziten Vorgang den Nutzer zwingt, sein Konto noch einmal zu verknüpfen. Wenn Sie aus Sicherheitsgründen ein Token auslaufen müssen, sollten Sie stattdessen den Autorisierungscode-Ablauf verwenden.

OAuth-Kontoverknüpfung implementieren

Projekt konfigurieren

So konfigurieren Sie Ihr Projekt für die Verwendung von OAuth-Verknüpfungen:

  1. Öffnen Sie die Actions Console und wählen Sie das Projekt aus, das Sie verwenden möchten.
  2. Klicken Sie auf den Tab Entwickeln und wählen Sie Kontoverknüpfung aus.
  3. Aktivieren Sie den Schalter neben Kontoverknüpfung.
  4. Wählen Sie im Abschnitt Kontoerstellung die Option Nein, ich möchte die Kontoerstellung nur auf meiner Website zulassen aus.

  5. Wählen Sie unter Verknüpfungstyp die Option OAuth und Implizit aus.

  6. Gehen Sie unter Kundeninformationen folgendermaßen vor:

    • Weisen Sie der Client-ID von Actions to Google einen Wert zu, um Anfragen von Google zu identifizieren.
    • Fügen Sie die URLs für Ihre Autorisierungs- und Token-Austausch-Endpunkte ein.
  1. Klicken Sie auf Speichern.

OAuth-Server implementieren

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 das Einholen der Einwilligung von Nutzern in den Datenzugriff verantwortlich. Der Autorisierungsendpunkt stellt den noch nicht angemeldeten Nutzern eine Anmelde-UI bereit und zeichnet die Einwilligung für den angeforderten Zugriff auf.

Wenn deine Aktion eine der autorisierten APIs deines Dienstes aufrufen muss, verwendet Google diesen Endpunkt, um von deinen Nutzern die Berechtigung zu erhalten, diese APIs in ihrem Namen aufzurufen.

Eine typische implizite OAuth 2.0-Vorgangssitzung, die von Google initiiert wird, sieht den folgenden Ablauf aus:

  1. Google öffnet den Autorisierungsendpunkt im Browser des Nutzers. Der Nutzer meldet sich an, sofern er noch nicht angemeldet ist, und erteilt Google die Berechtigung, über Ihre API auf seine Daten zuzugreifen, sofern er dies noch nicht getan hat.
  2. Ihr Dienst erstellt ein Zugriffstoken und gibt es an Google zurück, indem er den Browser des Nutzers wieder an Google weiterleitet, wobei das Zugriffstoken an die Anfrage angehängt ist.
  3. Google ruft die APIs Ihres Dienstes auf und hängt das Zugriffstoken an jede Anfrage an. Ihr Dienst überprüft, ob das Zugriffstoken Google die Autorisierung für den Zugriff auf die API gewährt, und führt dann den API-Aufruf aus.

Autorisierungsanfragen verarbeiten

Wenn deine Aktion eine Kontoverknüpfung über einen impliziten OAuth 2.0-Vorgang vornehmen muss, sendet Google den Nutzer mit einer Anfrage mit den folgenden Parametern an deinen Autorisierungsendpunkt:

Parameter für den Autorisierungsendpunkt
client_id Die Client-ID, die Sie Google zugewiesen haben.
redirect_uri Die URL, an die Sie die Antwort auf diese Anfrage senden.
state Ein Buchhaltungswert, der unverändert in der Weiterleitungs-URI an Google zurückgegeben wird.
response_type Der Typ des Werts, der in der Antwort zurückgegeben werden soll. Für den impliziten OAuth 2.0-Vorgang ist der Antworttyp immer token.

Wenn Ihr Autorisierungsendpunkt beispielsweise unter https://myservice.example.com/auth verfügbar ist, könnte eine Anfrage so aussehen:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token

Führen Sie die folgenden Schritte aus, damit der Autorisierungsendpunkt Anmeldeanfragen verarbeiten kann:

  1. Prüfen Sie die Werte client_id und redirect_uri, um zu verhindern, dass Sie unbeabsichtigten oder falsch konfigurierten Client-Apps Zugriff gewähren:

    • Bestätige, dass die client_id mit der Client-ID übereinstimmt, die du Google zugewiesen hast.
    • Die durch den Parameter redirect_uri angegebene URL muss folgendes Format haben:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID ist die ID auf der Seite Projekteinstellungen der Actions Console.
  2. Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Wenn der Nutzer nicht angemeldet ist, schließen Sie den Anmelde- oder Registrierungsvorgang für den Dienst ab.

  3. Generieren Sie ein Zugriffstoken, mit dem Google auf Ihre API zugreift. Das Zugriffstoken kann ein beliebiger Stringwert sein. Es muss jedoch den Nutzer und den Client eindeutig repräsentieren, für den das Token bestimmt ist, und darf nicht erraten werden.

  4. Es wird eine HTTP-Antwort gesendet, die den Browser des Nutzers an die mit dem Parameter redirect_uri angegebene URL weiterleitet. Füge alle folgenden Parameter in das URL-Fragment ein:

    • access_token: das soeben generierte Zugriffstoken
    • token_type: der String bearer
    • state: der unveränderte Statuswert aus der ursprünglichen Anfrage Im Folgenden finden Sie ein Beispiel für die resultierende URL:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Der OAuth 2.0-Weiterleitungs-Handler von Google empfängt das Zugriffstoken und bestätigt, dass sich der Wert state nicht geändert hat. Nachdem Google ein Zugriffstoken für deinen Dienst erhalten hat, hängt Google das Token als Teil der AppRequest an nachfolgende Aufrufe deiner Aktion an.

Die Sprach-Benutzeroberfläche für den Authentifizierungsablauf entwerfen

Prüfe, ob der Nutzer bestätigt ist, und starte den Vorgang zur Kontoverknüpfung

  1. Öffnen Sie Ihr Actions Builder-Projekt in der Actions Console.
  2. Erstelle eine neue Szene, um die Kontoverknüpfung in deiner Aktion zu starten:
    1. Klicken Sie auf Szenen.
    2. Klicken Sie auf das Symbol Hinzufügen (+), um eine neue Szene hinzuzufügen.
  3. Klicken Sie in der neu erstellten Szene auf das Symbol zum Hinzufügen von Bedingungen.
  4. Fügen Sie eine Bedingung hinzu, die prüft, ob der mit der Unterhaltung verknüpfte Nutzer ein bestätigter Nutzer ist. Wenn die Prüfung fehlschlägt, kann deine Aktion während der Unterhaltung keine Kontoverknüpfung vornehmen und sollte auf Funktionen zugreifen, für die keine Kontoverknüpfung erforderlich ist.
    1. Geben Sie im Feld Enter new expression unter Bedingung die folgende Logik ein: user.verificationStatus != "VERIFIED"
    2. Wählen Sie unter Übergang eine Szene aus, für die keine Kontoverknüpfung erforderlich ist, oder eine Szene, die der Einstiegspunkt für die Funktion nur für Gäste ist.

  1. Klicken Sie unter Conditions (Bedingungen) auf das Symbol zum Hinzufügen .
  2. Fügen Sie eine Bedingung hinzu, um einen Kontoverknüpfungsvorgang auszulösen, wenn der Nutzer keine verknüpfte Identität hat.
    1. Geben Sie im Feld Enter new expression unter Bedingung die folgende Logik ein: user.verificationStatus == "VERIFIED"
    2. Wählen Sie unter Umstellung die Systemszene Kontoverknüpfung aus.
    3. Klicken Sie auf Speichern.

Nach dem Speichern wird dem Projekt eine neue Systemszene zur Kontoverknüpfung mit dem Namen <SceneName>_AccountLinking hinzugefügt.

Szene für die Kontoverknüpfung anpassen

  1. Wählen Sie unter Szenen die Systemszene für die Kontoverknüpfung aus.
  2. Klicke auf Prompt senden und füge einen kurzen Satz hinzu, um dem Nutzer zu beschreiben, warum die Aktion auf seine Identität zugreifen muss (z. B. „Zum Speichern deiner Einstellungen“).
  3. Klicken Sie auf Speichern.

  1. Klicken Sie unter Bedingungen auf Wenn der Nutzer die Kontoverknüpfung erfolgreich abschließt.
  2. Legen Sie fest, wie der Ablauf ausgeführt werden soll, wenn der Nutzer der Verknüpfung seines Kontos zustimmt. Rufen Sie beispielsweise den Webhook auf, um die erforderliche benutzerdefinierte Geschäftslogik zu verarbeiten und zurück zur ursprünglichen Szene zu wechseln.
  3. Klicken Sie auf Speichern.

  1. Klicken Sie unter Bedingungen auf Wenn der Nutzer die Kontoverknüpfung aufhebt oder ablehnt.
  2. Legen Sie fest, wie der Ablauf ausgeführt werden soll, wenn der Nutzer der Verknüpfung seines Kontos nicht zustimmt. Sie können beispielsweise eine Bestätigungsnachricht senden und zu Szenen weiterleiten, die Funktionen bieten, für die keine Kontoverknüpfung erforderlich ist.
  3. Klicken Sie auf Speichern.

  1. Klicken Sie unter Bedingungen auf Bei System- oder Netzwerkfehlern.
  2. Legen Sie fest, wie der Ablauf ausgeführt werden soll, wenn der Kontoverknüpfungsvorgang aufgrund von System- oder Netzwerkfehlern nicht abgeschlossen werden kann. Sie können beispielsweise eine Bestätigungsnachricht senden und zu Szenen weiterleiten, die Funktionen bieten, für die keine Kontoverknüpfung erforderlich ist.
  3. Klicken Sie auf Speichern.

Datenzugriffsanfragen verarbeiten

Wenn die Assistant-Anfrage ein Zugriffstoken enthält, prüfen Sie zuerst, ob das Zugriffstoken gültig (und nicht abgelaufen) ist, und rufen Sie dann das zugehörige Nutzerkonto aus der Datenbank ab.