Der OAuth-Verknüpfungstyp unterstützt zwei branchenübliche OAuth 2.0-Vorgänge: den impliziten und den Autorisierungscode-Vorgang.
在隐式代码流程中,Google 会在用户浏览器中打开您的授权端点。成功登录后,系统会向 Google 返回长期访问令牌。现在,从 Google 助理向你的 Action 发送的每个请求中都包含此访问令牌。
在授权代码流程中,您需要两个端点:
- 授权端点,该端点负责向尚未登录的用户显示登录界面,并以短期授权代码的形式记录所请求的访问。
- 令牌交换端点,负责两种类型的交换:
- 将授权代码交换为长期刷新令牌和短期访问令牌。用户完成帐号关联流程后,系统会进行这种交换。
- 将长期刷新令牌换成短期访问令牌。Google 需要新访问令牌时,由于此令牌已过期,因此会进行此交换。
虽然隐式代码流程的实现更简单,但 Google 建议通过隐式流程发出的访问令牌永远不会过期,因为将令牌过期与隐式流程一起使用会强制用户再次关联其帐号。如果出于安全考虑需要令牌到期,强烈建议您考虑使用身份验证代码流程。
OAuth-Kontoverknüpfung implementieren
Projekt konfigurieren
So konfigurieren Sie Ihr Projekt für die Verwendung der OAuth-Verknüpfung:
- Öffnen Sie die Actions Console und wählen Sie das gewünschte Projekt aus.
- Klicken Sie auf den Tab Entwickeln und wählen Sie Kontoverknüpfung aus.
- Aktiviere den Schalter neben Kontoverknüpfung.
- Wählen Sie im Bereich Kontoerstellung die Option Nein, ich möchte die Kontoerstellung nur auf meiner Website zulassen aus.
Wählen Sie unter Linking type (Verknüpfungstyp) die Optionen OAuth und Authorization code (Autorisierungscode) aus.
Unter Client Information (Client-Informationen):
- Weisen Sie Client-ID, die von Ihren Actions an Google ausgegeben wird einen Wert zu, um Anfragen von Google zu identifizieren.
- Notieren Sie sich den Wert von Client-ID, die von Google für Ihre Aktionen ausgestellt wurde:
- Fügen Sie die URLs für Ihre Autorisierungs- und Token-Austausch-Endpunkte ein.
- 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:
- 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.
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.
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.
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.
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:
Prüfe, ob die
client_idmit der Google-Client-ID übereinstimmt, mit der du dich registriert hast und dass dieredirect_urimit 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_typeistcode.Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Ist der Nutzer nicht angemeldet, den Anmelde- oder Anmeldevorgang Ihres Service abzuschließen.
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.
Prüfen Sie, ob die im Parameter
redirect_uriangegebene URL hat folgendes Format: YOUR_PROJECT_ID ist die ID auf der Seite Projekteinstellungen. der Actions Console.https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
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 Parametercodeundstateanhä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:
- Prüfen Sie, ob
client_idden Ursprung der Anfrage als autorisierten Ursprung identifiziert. undclient_secretmit dem erwarteten Wert übereinstimmt. - Ü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_uriangegebene URL ist identisch auf den Wert, der in der ursprünglichen Autorisierungsanfrage verwendet wurde.
- 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 - 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.
- 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:
- Prüfen Sie, ob
client_idden Ursprung der Anfrage identifiziert als und dass dieclient_secretmit den erwarteten Wert. - 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.
- 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 - 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.
- 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 }
Sprachbenutzeroberfläche für den Authentifizierungsvorgang entwerfen
Prüfen, ob der Nutzer bestätigt ist, und den Kontoverknüpfungsvorgang starten
- Öffnen Sie Ihr Actions Builder-Projekt in der Actions Console.
- Erstellen Sie eine neue Szene, um die Kontoverknüpfung in Ihrer Aktion zu starten:
- Klicken Sie auf Szenen.
- Klicken Sie auf das Hinzufügen-Symbol (+), um eine neue Szene hinzuzufügen.
- Klicken Sie in der neu erstellten Szene auf das Symbol zum Hinzufügen add für Bedingungen.
- 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 für Ihre Aktion während der Unterhaltung keine Kontoverknüpfung durchgeführt werden. In diesem Fall sollte auf Funktionen zurückgegriffen werden, für die keine Kontoverknüpfung erforderlich ist.
- Geben Sie im Feld
Enter new expressionunter Bedingung die folgende Logik ein:user.verificationStatus != "VERIFIED" - Wählen Sie unter Übergang eine Szene aus, für die keine Kontoverknüpfung erforderlich ist, oder eine Szene, die den Einstiegspunkt für Funktionen ist, die nur für Gäste verfügbar sind.
- Geben Sie im Feld

- Klicken Sie für Bedingungen auf das Symbol zum Hinzufügen add.
- Fügen Sie eine Bedingung hinzu, um einen Vorgang für die Kontoverknüpfung auszulösen, wenn der Nutzer keine zugehörige Identität hat.
- Geben Sie im Feld
Enter new expressionunter Bedingung die folgende Logik ein::user.verificationStatus == "VERIFIED" - Wählen Sie unter Übergang die Systemszene Kontoverknüpfung aus.
- Klicken Sie auf Speichern.
- Geben Sie im Feld

Nach dem Speichern wird Ihrem Projekt eine neue Szene für die Kontoverknüpfung mit dem Namen <SceneName>_AccountLinking hinzugefügt.
Szene für die Kontoverknüpfung anpassen
- Wählen Sie unter Szenen die Systemszene für die Kontoverknüpfung aus.
- Klicken Sie auf Prompt senden und fügen Sie einen kurzen Satz hinzu, um dem Nutzer zu erklären, warum die Action auf seine Identität zugreifen muss (z. B. „Zum Speichern Ihrer Einstellungen“).
- Klicken Sie auf Speichern.

- Klicken Sie unter Bedingungen auf Wenn der Nutzer die Kontoverknüpfung erfolgreich abschließt.
- Konfigurieren Sie, wie der Ablauf fortgesetzt werden soll, wenn der Nutzer der Verknüpfung seines Kontos zustimmt. Rufen Sie den Webhook beispielsweise auf, um die erforderliche benutzerdefinierte Geschäftslogik zu verarbeiten und zur ursprünglichen Szene zurückzukehren.
- Klicken Sie auf Speichern.

- Klicken Sie unter Bedingungen auf Wenn der Nutzer die Kontoverknüpfung abbricht oder schließt.
- Konfigurieren Sie, wie der Vorgang fortgesetzt werden soll, wenn der Nutzer der Verknüpfung seines Kontos nicht zustimmt. Senden Sie beispielsweise eine Bestätigungsnachricht und leiten Sie Nutzer zu Szenen weiter, die Funktionen bieten, für die keine Kontoverknüpfung erforderlich ist.
- Klicken Sie auf Speichern.

- Klicken Sie unter Bedingungen auf Bei System- oder Netzwerkfehler.
- Konfigurieren Sie, wie der Ablauf fortgesetzt werden soll, wenn der Ablauf für die Kontoverknüpfung aufgrund von System- oder Netzwerkfehlern nicht abgeschlossen werden kann. Senden Sie beispielsweise eine Bestätigungsnachricht und leiten Sie Nutzer zu Szenen weiter, die Funktionen bieten, für die keine Kontoverknüpfung erforderlich ist.
- Klicken Sie auf Speichern.
Datenzugriffsanfragen bearbeiten
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 Ihrer Datenbank ab.