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 den Autorisierungscode 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.
    • Notieren Sie sich den Wert der von Google für Ihre Aktionen ausgegebenen Client-ID.
    • Fügen Sie die URLs für Ihre Autorisierungs- und Token-Austausch-Endpunkte ein.
  1. Klicken Sie auf Speichern.

OAuth-Server implementieren

Eine OAuth-2.0-Serverimplementierung des Autorisierungscode-Vorgangs besteht aus zwei Endpunkte, die Ihr Dienst über HTTPS zur Verfügung stellt. Der erste Endpunkt ist der Autorisierungsendpunkt, der für die Suche oder den Erhalt Einwilligung der Nutzer für den Datenzugriff erteilen. Der Autorisierungsendpunkt zeigt eine Anmeldung auf der Benutzeroberfläche angezeigt, die noch nicht angemeldet sind und die Einwilligung zum hat Zugriff angefordert. Der zweite Endpunkt ist der Tokenaustausch-Endpunkt. zum Abrufen verschlüsselter Strings, sogenannter Tokens, die den Aktionsnutzer autorisieren um auf Ihren Dienst zuzugreifen.

Wenn deine Aktion eine der APIs deines Dienstes aufrufen muss, verwendet Google diese um die Berechtigung von Nutzern zu erhalten, diese APIs auf ihrem

Von Google initiierte Sitzung mit OAuth 2.0-Authentifizierungscode läuft so ab:

  1. Google öffnet Ihren Autorisierungsendpunkt im Browser des Nutzers. Wenn der Fluss die für eine Aktion auf einem Nur-Sprach-Gerät gestartet wird, bis hin zu einem Smartphone.
  2. Der Nutzer meldet sich an (falls er noch nicht angemeldet ist) und erteilt Google die Berechtigung, mit Ihrer API auf ihre Daten zugreifen, falls sie nicht bereits eine entsprechende Berechtigung erteilt haben.

  3. Ihr Dienst erstellt einen Autorisierungscode und gibt ihn an Google zurück, indem Sie Der Browser des Nutzers wird mithilfe des Autorisierungscodes an Google weitergeleitet. an die Anfrage angehängt.

  4. Google sendet den Autorisierungscode an Ihren Endpunkt für den Tokenaustausch, der überprüft die Authentizität des Codes und gibt ein Zugriffstoken sowie ein Aktualisierungstoken. Das Zugriffstoken ist ein kurzlebiges Token, das von Ihrem Dienst als Anmeldedaten für den Zugriff auf APIs akzeptiert. Das Aktualisierungstoken ist ein langlebiges Token, das Google speichern und verwenden kann, um neue Zugriffstokens zu erhalten, wenn sie verfallen lassen.

  5. Nachdem der Nutzer die Kontoverknüpfung abgeschlossen hat, werden alle nachfolgenden Anfrage, die von Assistant an den Webhook für die Auftragsausführung gesendet wird, enthält ein ein Zugriffstoken hinzufügen.

Autorisierungsanfragen verarbeiten

Wenn deine Aktion die Kontoverknüpfung über einen OAuth 2.0-Autorisierungscode ausführen muss sendet Google den Nutzer mit einer Anfrage an Ihren Autorisierungsendpunkt, enthält die folgenden Parameter:

Parameter des Autorisierungsendpunkts
client_id Die Google-Client-ID, die Sie bei Google registriert haben.
redirect_uri Die URL, an die Sie die Antwort auf diese Anfrage senden.
state Buchhaltungswert, der unverändert an Google zurückgegeben wird Weiterleitungs-URI.
scope Optional: Ein durch Leerzeichen getrennter Satz von Bereichsstrings, die die Daten, für die Google eine Autorisierung anfordert.
response_type Der String code.

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&scope=REQUESTED_SCOPES&response_type=code

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

  1. Prüfe, ob die client_id mit der Google-Client-ID übereinstimmt, mit der du dich registriert hast und dass die redirect_uri mit der von Google bereitgestellten Weiterleitungs-URL übereinstimmt für Ihren Dienst. Diese Prüfungen sind wichtig, um zu verhindern, unbeabsichtigte oder falsch konfigurierte Client-Apps.

    Wenn Sie mehrere OAuth 2.0-Abläufe unterstützen, prüfen Sie auch, ob die response_type ist code.

  2. Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Ist der Nutzer nicht angemeldet, den Anmelde- oder Anmeldevorgang Ihres Service abzuschließen.

  3. Generieren Sie einen Autorisierungscode, mit dem Google auf Ihre API zugreift. Der Autorisierungscode kann ein beliebiger Stringwert sein, muss aber eindeutig sein stellen den Nutzer, den Client, für den das Token gilt, und den Ablauf des Codes dar. Zeit und darf nicht erraten werden. In der Regel erteilen Sie eine Autorisierung Codes, die nach etwa 10 Minuten ablaufen.

  4. Prüfen Sie, ob die im Parameter redirect_uri angegebene URL hat folgendes Format:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
    YOUR_PROJECT_ID ist die ID auf der Seite Projekteinstellungen. der Actions Console.

  5. Leiten Sie den Browser des Nutzers an die URL weiter, die im redirect_uri-Parameter. Geben Sie den Autorisierungscode an, und den ursprünglichen, unveränderten Statuswert beim Weiterleiten indem Sie die Parameter code und state anhängen. Hier ein Beispiel der resultierenden URL:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Anfragen zum Tokenaustausch verarbeiten

Der Tokenaustausch-Endpunkt Ihres Dienstes ist für zwei Arten von Tokens verantwortlich Plattformen:

  • Autorisierungscodes gegen Zugriffstokens und Aktualisierungstokens austauschen
  • Aktualisierungstokens gegen Zugriffstokens austauschen

Anfragen für den Tokenaustausch umfassen die folgenden Parameter:

Parameter für den Tokenaustausch-Endpunkt
client_id Ein String, der den Ursprung der Anfrage als Google identifiziert. Dieser String muss in Ihrem System als eindeutige Kennung von Google registriert sein.
client_secret Ein geheimer String, den Sie bei Google für Ihren Dienst registriert haben.
grant_type Der Tokentyp, der ausgetauscht wird. Beides authorization_code oder refresh_token.
code Wenn grant_type=authorization_code, wird der Code von Google die von Ihrem Anmelde- oder Tokenaustausch-Endpunkt empfangen wurden.
redirect_uri Wenn grant_type=authorization_code festgelegt ist, ist dieser Parameter der In der ursprünglichen Autorisierungsanfrage verwendete URL.
refresh_token Bei grant_type=refresh_token wird das Aktualisierungstoken von Google von Ihrem Tokenaustausch-Endpunkt erhalten haben.
Autorisierungscodes gegen Zugriffstokens und Aktualisierungstokens austauschen

Nachdem sich der Nutzer angemeldet hat und der Autorisierungsendpunkt eine kurzlebige Autorisierung zurückgibt Code an Google gesendet, sendet Google eine Anfrage zum Austausch an Ihren Endpunkt für den Tokenaustausch. Autorisierungscode für ein Zugriffstoken und ein Aktualisierungstoken

Bei diesen Anfragen ist der Wert von grant_type authorization_code und der Wert code ist der Wert des Autorisierungscodes, den Sie Google zuvor gewährt haben. Im Folgenden finden Sie ein Beispiel für eine Anfrage zum Austausch eines Autorisierungscodes für eine ein Zugriffstoken und ein Aktualisierungstoken:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

Um Autorisierungscodes gegen ein Zugriffstoken und ein Aktualisierungstoken auszutauschen, Der Tokenaustausch-Endpunkt antwortet auf POST-Anfragen mit den folgenden Schritten:

  1. Prüfen Sie, ob client_id den Ursprung der Anfrage als autorisierten Ursprung identifiziert. und client_secret mit dem erwarteten Wert übereinstimmt.
  2. Überprüfen Sie Folgendes: <ph type="x-smartling-placeholder">
      </ph>
    • Der Autorisierungscode ist gültig und nicht abgelaufen und der Client Die in der Anfrage angegebene ID stimmt mit der Client-ID überein, die dem Autorisierungscode.
    • Die durch den Parameter redirect_uri angegebene URL ist identisch auf den Wert, der in der ursprünglichen Autorisierungsanfrage verwendet wurde.
  3. Wenn Sie nicht alle oben genannten Kriterien überprüfen können, geben Sie eine HTTP- Fehler „400 Bad Request“ mit {"error": "invalid_grant"} als Textkörper
  4. Alternativ können Sie mit der Nutzer-ID aus dem Autorisierungscode eine Aktualisierung generieren. Token und ein Zugriffstoken. Diese Token können ein beliebiger Stringwert sein, müssen den Nutzer und den Client, für den das Token bestimmt ist, eindeutig repräsentieren, erraten werden kann. Notieren Sie sich bei Zugriffstokens auch die Ablaufzeit des Tokens. in der Regel eine Stunde nach der Ausstellung des Tokens. Aktualisierungstokens laufen nicht ab.
  5. Geben Sie im Text der HTTPS-Antwort das folgende JSON-Objekt zurück:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }
    

Google speichert das Zugriffstoken und das Aktualisierungstoken für den Nutzer und zeichnet die Ablauf des Zugriffstokens. Wenn das Zugriffstoken abläuft, verwendet Google die Aktualisierung. Token, um ein neues Zugriffstoken von Ihrem Tokenaustausch-Endpunkt abzurufen.

Aktualisierungstokens gegen Zugriffstokens austauschen

Wenn ein Zugriffstoken abläuft, sendet Google eine Anfrage an Ihren Endpunkt für den Tokenaustausch um ein Aktualisierungstoken gegen ein neues Zugriffstoken auszutauschen.

Bei diesen Anfragen ist der Wert von grant_type refresh_token und der Wert von refresh_token ist der Wert des Aktualisierungstokens, das Sie Google zuvor gewährt haben. Das folgende Beispiel zeigt eine Anfrage zum Austausch eines Aktualisierungstokens für eine Zugriffstoken:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Ihr Endpunkt für den Tokenaustausch, um ein Aktualisierungstoken gegen ein Zugriffstoken auszutauschen antwortet auf POST-Anfragen, die die folgenden Schritte ausführen:

  1. Prüfen Sie, ob client_id den Ursprung der Anfrage identifiziert als und dass die client_secret mit den erwarteten Wert.
  2. Prüfen Sie, ob das Aktualisierungstoken gültig ist und ob die Client-ID, die im Die Anfrage stimmt mit der Client-ID überein, die mit dem Aktualisierungstoken verknüpft ist.
  3. Wenn Sie nicht alle oben genannten Kriterien überprüfen können, geben Sie eine HTTP- Fehler „400 Bad Request“ mit {"error": "invalid_grant"} als Textkörper
  4. Andernfalls verwenden Sie die Nutzer-ID aus dem Aktualisierungstoken, um einen Zugriff zu generieren. Token. Diese Token können ein beliebiger Stringwert sein, müssen aber eindeutig den Nutzer und den Client, für den das Token bestimmt ist, und sie dürfen nicht erraten werden. Notieren Sie sich bei Zugriffstokens auch die Ablaufzeit des Tokens. in der Regel eine Stunde nach der Ausstellung des Tokens.
  5. Geben Sie das folgende JSON-Objekt im Text des HTTPS-Objekts zurück: Antwort:
    {
    "token_type": "Inhaber",
    "access_token": "ACCESS_TOKEN",
    
    „expires_in“: SECONDS_TO_EXPIRATION
    }

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.