OAuth 連結類型支援兩種業界標準 OAuth 2.0 流程:隱含與授權碼流程。在隱含程式碼流程中,Google 會在使用者的瀏覽器中開啟授權端點。成功登入後,會將長效的存取憑證傳回 Google。之後,每次從 Google 助理傳送至「動作」的要求時,都會包含這個存取權杖。
如果遇到下列情況,建議您使用 OAuth 連結來解決問題:
- 您已實作 OAuth 2.0 伺服器,但無法擴充權杖交換端點,藉此新增透過 ID 憑證 (例如在要求中加入這個端點中的
intent=get
和intent=create
參數) 的 Google 自動連結和帳戶建立支援功能。
如要確認 OAuth 連結是最合適的解決方案,請參閱選擇您的帳戶連結類型頁面。
重要詞彙
在閱讀 OAuth 連結的運作方式之前,請先熟悉以下條款:
user.verificationStatus
:由系統設定的屬性,表示目前工作階段是否有已驗證的使用者。user.accountLinkingStatus
:系統設定的屬性,表示目前工作階段中的使用者是否有已連結的身分。帳戶連結系統場景:這個預先定義的場景會導入帳戶連結確認流程,並且可針對特定用途加以自訂。
授權碼流程:在這項 OAuth 2.0 流程期間,Google 會在使用者的瀏覽器中開啟您的授權端點。成功登入之後,您的服務會建立授權碼,並將代碼傳回 Google。Google 會將這個授權碼傳送至您的權杖交換端點,這個端點會驗證代碼的真實性,並傳回存取權杖和更新權杖。
此流程需要兩個端點:
- 授權端點:這個端點負責尋找或取得使用者的同意聲明,以便存取資料。此端點會執行以下操作:
- 向未登入的使用者顯示登入使用者介面。
- 以短期授權代碼的形式記錄已同意的存取權。
- 權杖交換端點:這個端點可用來取得名為 tokens 的加密字串,授權動作使用者存取您的服務。此端點負責下列兩種廣告交易平台:
- 將長期更新憑證與短期存取權杖交換授權碼。使用者完成帳戶連結流程後,系統就會執行這項交換作業。
- 將長期更新憑證交換成短期存取權杖。當 Google 需要新的存取權杖已過期時,這個交換作業就會發生。
- 授權端點:這個端點負責尋找或取得使用者的同意聲明,以便存取資料。此端點會執行以下操作:
隱式程式碼流程:此 OAuth 2.0 流程期間,Google 會在使用者的瀏覽器中開啟您的授權端點。如果成功登入,則會將長效存取權杖傳回 Google。之後,每次從 Google 助理傳送至「動作」的要求時,都會包含這個存取權杖。此流程只需要授權端點。
存取憑證:可授權服務存取使用者資料的部分內容。存取權杖與個別使用者有關,而且不應該加以猜測。
重新整理權杖:短期存取權杖過期後,此憑證會用於新的存取權杖。
運作方式
本節將說明 OAuth 授權碼的一般流程和隱含流程。下一節「OAuth 連結流程」說明 OAuth 可能發生的各種流程。
授權碼流程摘要如下:
- 您的動作會詢問使用者是否要將自己的帳戶與您的服務連結。
- 使用者同意連結帳戶之後,Google 會在使用者的瀏覽器中開啟您的授權端點。如果流程是在語音專用裝置上執行動作,Google 會將執行作業轉移到手機。
- 使用者登入 (如果尚未登入) 並授權 Google 透過您的 API 存取自己的資料 (如果尚未授予權限)。
- 您的服務會建立「授權碼」,並將使用者的瀏覽器傳回 Google 以及附加於要求中的授權碼,藉此將代碼傳回 Google。
- Google 會將授權碼傳送至您的權杖交換端點,藉此驗證程式碼的真實性,並傳回存取權杖和重新整理權杖。存取權杖是一種短期權杖,讓您的服務接受以存取 API 的憑證。重新整理權杖是一種長期權杖,當 Google 到期時,Google 可以用來儲存新的存取權杖。
- 使用者完成帳戶連結流程後,從 Google 助理傳送至出貨 Webhook 的每個後續要求都會包含存取權杖。
隱含程式碼的流程可大致如下:
- 您的動作會詢問使用者是否要將自己的帳戶與您的服務連結。
- 使用者同意連結帳戶之後,Google 會在使用者的瀏覽器中開啟您的授權端點。
- 使用者登入 (如果尚未登入) 並授權 Google 透過您的 API 存取自己的資料 (如果尚未授予權限)。
- 您的服務會建立存取權杖,並將使用者的瀏覽器重新導向至 Google,藉此將存取權杖傳回 Google。
- 使用者完成帳戶連結流程後,Google 會呼叫服務的 API,並在每項要求中附加存取權杖。您的服務會驗證存取權杖授予 Google 存取 API 的權限,然後完成 API 呼叫。
基本授權碼流程如下:
- 您的動作會詢問使用者是否要將自己的帳戶與您的服務連結。
- 使用者同意連結帳戶之後,Google 會在使用者的瀏覽器中開啟您的授權端點。如果流程是在語音專用裝置上執行動作,Google 會將執行作業轉移到手機。
- 使用者登入 (如果尚未登入) 並授權 Google 透過您的 API 存取自己的資料 (如果尚未授予權限)。
- 您的服務會建立授權碼,並將使用者的瀏覽器重新導向到 Google,並將這個短碼授權碼附在要求中,藉此將代碼傳回 Google。
- Google 會將授權碼傳送至您的權杖交換端點,藉此驗證程式碼的真實性,並傳回存取權杖和重新整理權杖。存取權杖是一種短期權杖,讓您的服務接受以存取 API 的憑證。重新整理權杖是一種長期權杖,當 Google 到期時,Google 可以用來儲存新的存取權杖。
- 使用者完成帳戶連結流程後,從 Google 助理傳送至出貨 Webhook 的每個後續要求都會包含存取權杖。
OAuth 連結流程
本節介紹 OAuth 連結可能發生的各種流程。
每個流程皆包含使用者叫用動作後的一般步驟:
在上述流程中,您將轉換為帳戶連結系統場景,並提供自訂原因。Google 助理會詢問使用者是否要將自己的帳戶與您的服務連結,並在螢幕上顯示要求權限的畫面。使用者表示同意後,Google 就會將使用者重新導向至瀏覽器中的授權端點。使用者登入 (或根據您的設定建立一個新帳戶),並授予您的動作存取其資料的權限。
在這個時間點之後的流程,取決於您是否實作了隱含流程或授權碼流程。以下各節將說明這些流程。
流程 1:使用者以隱含流程登入
使用者登入且其憑證經過驗證後,您的服務就會建立長效的存取權杖並傳回 Google。此時,動作中的使用者身分會連結至他們登入的帳戶,且存取權杖會附加在 Google 向服務 API 發出的每個 API 呼叫。
流程 2:使用者使用授權碼流程登入
使用者登入且其憑證通過驗證後,您的服務就會建立授權碼並傳回 Google。
此授權碼會傳送至您的權杖交換端點,這個端點會傳回存取權杖和更新權杖。此時,動作中的使用者身分已連結至他們登入的任何帳戶,而從 Google 助理傳送至執行要求的每個後續要求都包含存取權杖。