如果您是使用 HTTP 端點建構 Google Chat 應用程式,本節將說明如何驗證傳送至端點的要求是否來自 Chat。
如要將互動事件傳送至 Chat 擴充應用程式的端點,Google 會向您的服務提出要求。為驗證要求來自 Google,Chat 會在傳送至端點的每個 HTTPS 要求 Authorization 標頭中,加入不記名權杖。例如:
POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite
上述範例中的字串 AbCdEf123456 是不記名授權權杖。這是 Google 產生的加密權杖。持有人權杖的類型和 audience 欄位的值,取決於您在設定 Chat 應用程式時選取的驗證對象類型。
如果您使用 Cloud Run 函式實作 Chat 應用程式,Cloud IAM 會自動處理權杖驗證。您必須將 Google Chat 服務帳戶新增為授權呼叫者。如果應用程式實作了自己的 HTTP 伺服器,可以使用開放原始碼的 Google API 用戶端程式庫驗證不記名權杖:
- Java:https://github.com/google/google-api-java-client
- Python:https://github.com/google/google-api-python-client
- Node.js:https://github.com/google/google-api-nodejs-client
- .NET:https://github.com/google/google-api-dotnet-client
如果權杖無法通過 Chat 應用程式驗證,您的服務應以 HTTPS 回應碼 401 (Unauthorized) 回應要求。
使用 Cloud Run 函式驗證要求
如果函式邏輯是使用 Cloud Run 函式實作,您必須在 Chat 應用程式連線設定的「驗證對象」欄位中選取「HTTP 端點網址」,並確保設定中的 HTTP 端點網址與 Cloud Run 函式端點的網址相符。
接著,請按照下列步驟,授權 Google Chat 服務帳戶 chat@system.gserviceaccount.com 做為呼叫者:
控制台
將函式或服務部署至 Google Cloud 後,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run 頁面:
在 Cloud Run 服務清單中,按一下接收函式旁的核取方塊。(請勿點選函式本身)。
按一下畫面頂端的「權限」。「權限」面板隨即開啟。
按一下「新增主體」。
在「New principals」(新增主體) 欄位中輸入
chat@system.gserviceaccount.com。從「Select a role」選單中,選取「Cloud Run」角色。
Cloud Run 叫用者。
按一下 [儲存]。
gcloud
使用 gcloud functions add-invoker-policy-binding 指令:
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:chat@system.gserviceaccount.com'將 RECEIVING_FUNCTION 替換成 Chat 應用程式函式的名稱。
使用 ID 權杖驗證 HTTP 要求
如果 Chat 應用程式連線設定的「驗證對象」欄位設為HTTP 端點網址,要求中的不記名授權權杖就是 Google 簽署的 OpenID Connect (OIDC)ID 權杖。email 欄位設為 chat@system.gserviceaccount.com。「驗證目標對象」欄位會設為您設定 Google Chat 將要求傳送至 Chat 擴充應用程式的網址。舉例來說,如果 Chat 擴充應用程式的設定端點為 https://example.com/app/,則 ID 權杖中的「驗證目標對象」欄位為 https://example.com/app/。
如果 HTTP 端點並非託管在支援 IAM 驗證的服務 (例如 Cloud Run) 上,建議使用這個驗證方法。使用這個方法時,HTTP 服務需要執行端點的網址相關資訊,但不需要 Cloud 專案編號相關資訊。
下列範例說明如何使用 Google OAuth 用戶端程式庫,確認持有人權杖是由 Google Chat 核發,且適用於您的應用程式。
Java
Python
Node.js
使用專案編號 JWT 驗證要求
如果 Chat 應用程式連線設定的「驗證對象」欄位設為 Project
Number,要求中的不記名授權權杖就是由 chat@system.gserviceaccount.com 核發及簽署的自行簽署 JSON Web Token (JWT)。audience 欄位會設為您用來建構 Chat 應用程式的 Google Cloud 專案編號。舉例來說,如果 Chat 應用程式的 Cloud 專案編號是 1234567890,則 JWT 中的 audience 欄位就是 1234567890。
如果您偏好使用 Cloud 專案編號驗證要求,而非 HTTP 端點網址,建議採用這種驗證方法。舉例來說,您可能想在一段時間內變更端點網址,但保留相同的 Cloud 專案編號;或者您想為多個 Cloud 專案編號使用相同的端點,並將 audience 欄位與 Cloud 專案編號清單進行比較。
下列範例說明如何使用 Google OAuth 用戶端程式庫,驗證持有人權杖是否由 Google Chat 發行,且以您的專案為目標。