驗證及授權即時通訊應用程式和 Google Chat API 要求

驗證和授權機制分別用於驗證身分和資源存取權。本文概述 Chat 應用程式和 Chat API 要求的驗證和授權運作方式。

流程總覽

下圖顯示 Google Chat 驗證和授權的高階步驟:

Google Chat 驗證與授權的高階步驟
圖 1 Google Chat 驗證與授權的高階步驟。

  1. 設定 Google Cloud 專案、啟用 Chat API,並設定 Chat 應用程式:在開發期間,您可以建立 Google Cloud 專案。在 Google Cloud 專案中,您需要啟用 Chat API、設定 Chat 應用程式並設定驗證機制。詳情請參閱「在 Google Workspace 上開發」和「建構 Chat 應用程式」。

  2. Call Chat API:應用程式呼叫 Chat API 時,會將驗證憑證傳送至 Chat API。如果應用程式使用服務帳戶進行驗證,則憑證會以應用程式程式碼的一部分的形式傳送。如果您的應用程式需要使用尚未授予的使用者驗證方式呼叫 Chat API,就會提示使用者登入。

  3. 要求資源:應用程式要求存取您在設定驗證時指定的範圍

  4. 詢問是否同意:如果應用程式是以使用者的身分進行驗證,Google 會顯示 OAuth 同意畫面,讓使用者決定是否授予應用程式要求資料的存取權。使用服務帳戶進行驗證時不需要徵得使用者同意。

  5. 傳送已核准的資源要求:如果使用者同意授權範圍,您的應用程式就會將憑證和使用者核准的範圍封裝到要求中。系統會將要求傳送至 Google 授權伺服器,以取得存取權杖。

  6. Google 傳回存取權杖:存取權杖包含已授予的範圍清單。如果傳回的範圍清單比要求的範圍更嚴格,應用程式就會關閉受到權杖限制的所有功能。

  7. 存取要求的資源:應用程式會使用 Google 的存取憑證叫用 Chat API 及存取 Chat API 資源。

  8. 取得更新權杖 (選用):如果應用程式必須在單一存取權杖的生命週期結束後存取 Google Chat API,就能取得更新權杖。詳情請參閱「使用 OAuth 2.0 存取 Google API」的說明。

  9. 要求更多資源:如果應用程式需要更多存取權,就會要求使用者授予新範圍,導致新的要求取得存取權杖 (步驟 3-6)。

當 Chat 擴充應用程式需要驗證時

即時通訊應用程式可以藉由回應使用者互動 (或非同步) 傳送訊息。使用者也可以代表使用者完成工作,例如建立 Chat 聊天室,或取得 Chat 聊天室中的使用者清單。

除非 Chat 應用程式在處理回應時呼叫 Chat API 或其他 Google API,否則即時通訊應用程式不需要驗證即可回應使用者互動。

為了傳送非同步訊息或代表使用者執行工作,Chat 應用程式會向 Chat API 發出符合 REST 樣式的要求,而這些要求需要驗證和授權。

回應使用者互動時不需要驗證

Google Chat 應用程式不需要以使用者或 Chat 應用程式的身分進行驗證,就能同步接收及回應互動事件

每當使用者互動或叫用 Chat 擴充應用程式時,Google Chat 應用程式都會收到互動事件,包含:

  • 使用者傳送訊息至 Chat 應用程式。
  • 使用者使用 @號提及 Chat 應用程式。
  • 使用者叫用其中一個 Chat 應用程式的斜線指令

下圖顯示 Chat 使用者和 Chat 應用程式之間的要求/回應序列:

使用 Chat 應用程式互動事件時不需要授權
圖 2:Chat 應用程式互動事件不需要驗證。

  1. 使用者傳送訊息至 Google Chat 中的 Chat 應用程式。
  2. Google Chat 會將訊息轉寄至應用程式。
  3. 應用程式會接收、處理訊息,然後將回應傳回 Google Chat。
  4. Google Chat 會為使用者或聊天室顯示回覆。

每個 Chat 應用程式互動事件都會重複這個順序。

非同步郵件需要驗證

當 Chat 應用程式向 Chat API 發出需要驗證和授權的要求時,就會發生非同步訊息。

透過呼叫 Chat API,即時通訊應用程式可以將訊息發布至 Google Chat,或是代表使用者完成工作及存取資料。舉例來說,偵測到伺服器服務中斷後,Chat 應用程式可以呼叫 Chat API 以執行下列操作:

  • 建立專門用來調查和修正服務中斷問題的 Chat 聊天室。
  • 將使用者加入 Chat 聊天室。
  • 在 Chat 聊天室中張貼訊息,提供服務中斷的詳細資料。

下圖顯示 Chat 應用程式和 Chat 聊天室之間的非同步訊息序列:

非同步訊息需要驗證
圖 3. 非同步訊息需要驗證。

  1. Chat 應用程式使用 spaces.messages.create 方法呼叫 Chat API 來建立訊息,並在 HTTP 要求中加入使用者憑證。
  2. Google Chat 會使用服務帳戶或使用者憑證來驗證 Chat 應用程式。
  3. Google Chat 會將應用程式的訊息轉譯至指定的 Chat 聊天室。

Chat API 範圍

設定 OAuth 同意畫面並選擇範圍,定義要向使用者和應用程式審查者顯示的資訊,並註冊應用程式以供日後發布。

如要定義授予應用程式的存取層級,您必須識別並宣告授權範圍。授權範圍是 OAuth 2.0 URI 字串,內含 Google Workspace 應用程式名稱、它存取的資料類型,以及存取層級。

非機密範圍

範圍程式碼 說明
https://www.googleapis.com/auth/chat.bot

chat.bot 範圍僅支援服務帳戶。您無法透過使用者憑證或全網域委派使用這個範圍進行驗證。

允許 Chat 擴充應用程式查看即時通訊及傳送訊息。授權使用 Chat 應用程式提供的所有功能。

機密範圍

範圍程式碼 說明
https://www.googleapis.com/auth/chat.spaces 在 Chat 中建立對話和聊天室,以及查看或編輯中繼資料 (包括記錄設定和存取設定)。
https://www.googleapis.com/auth/chat.spaces.create 在 Chat 中建立新的對話。
https://www.googleapis.com/auth/chat.spaces.readonly 在 Chat 中查看即時通訊和聊天室。
https://www.googleapis.com/auth/chat.memberships 在 Chat 對話中查看、新增、更新及移除成員。
https://www.googleapis.com/auth/chat.memberships.app 在 Google Chat 的對話中新增及移除本應用程式。
https://www.googleapis.com/auth/chat.memberships.readonly 查看 Chat 對話中的成員。
https://www.googleapis.com/auth/chat.messages.create 在 Chat 中撰寫及傳送訊息。
https://www.googleapis.com/auth/chat.messages.reactions 在 Chat 中查看、新增和刪除訊息回應。
https://www.googleapis.com/auth/chat.messages.reactions.create 在 Chat 中新增訊息的回應。
https://www.googleapis.com/auth/chat.messages.reactions.readonly 在 Chat 中查看訊息的回應。
https://www.googleapis.com/auth/chat.users.readstate 查看及修改 Chat 對話的上次已讀時間。
https://www.googleapis.com/auth/chat.users.readstate.readonly 查看 Chat 對話的上次讀取時間。
https://www.googleapis.com/auth/chat.admin.spaces.readonly 在 Chat 中查看管理員網域擁有的即時通訊和聊天室。
https://www.googleapis.com/auth/chat.admin.memberships.readonly 在 Chat 中查看管理員網域所擁有對話的成員和管理員。
https://www.googleapis.com/auth/chat.admin.memberships 在 Chat 中查看、新增、更新及移除管理員網域所擁有對話的成員和管理員。

受限制的範圍

範圍程式碼 說明
https://www.googleapis.com/auth/chat.delete 刪除對話和聊天室,並移除對 Chat 相關檔案的存取權。
https://www.googleapis.com/auth/chat.import 將聊天室、訊息和成員資格匯入 Chat。詳情請參閱「授權 Chat 應用程式匯入資料
https://www.googleapis.com/auth/chat.messages 查看、撰寫、傳送、更新及刪除訊息,以及新增、查看和刪除訊息的回應。
https://www.googleapis.com/auth/chat.messages.readonly 在 Chat 中查看訊息和回應。
https://www.googleapis.com/auth/chat.admin.delete 刪除管理員網域擁有的對話和聊天室,並移除 Chat 中相關檔案的存取權。

上表中的範圍會根據下列定義表示機密程度:

如果您的應用程式需要存取任何其他 Google API,您也可以新增這些範圍。如要進一步瞭解 Google API 範圍,請參閱使用 OAuth 2.0 存取 Google API

如要進一步瞭解 Google Workspace API 的範圍,請參閱「設定 OAuth 同意畫面並選擇範圍」。

必要驗證類型

使用 Chat API 驗證與授權的方式有兩種:使用者憑證或服務帳戶。

有了使用者憑證授權,Chat 應用程式就能代表使用者存取使用者資料並完成動作。OAuth 範圍會指定經過授權的資料和動作。

有了應用程式授權功能,Chat 擴充應用程式就會使用服務帳戶憑證,以應用程式的形式存取 API。應用程式授權一律使用 chat.bot 授權範圍。

決定特定 API 要求使用的憑證類型時,請注意某些 API 方法僅支援特定類型的憑證。如果 API 方法同時支援這兩種憑證,則呼叫中使用的憑證類型會影響傳回的結果:

  • 如果使用應用程式授權,這些方法只會傳回應用程式可存取的資源。
  • 如果透過使用者授權,這些方法只會傳回 user 在 Chat UI 中可存取的資源。

舉例來說,使用應用程式授權呼叫 ListSpaces 方法,會傳回應用程式所屬的聊天室清單。透過使用者授權呼叫 ListSpaces,會傳回使用者所屬的聊天室清單。實際上,您的應用程式可能會在呼叫 Chat API 時,根據需要的功能使用這兩種授權類型。

非同步 Chat API 呼叫

下表列出 Chat API 方法及其支援的授權範圍:

方法 支援使用者驗證功能 支援應用程式驗證功能 支援的授權範圍
聊天室  
建立聊天室 透過使用者驗證機制
  • chat.spaces.create
  • chat.spaces
  • chat.import
設定聊天室 透過使用者驗證機制
  • chat.spaces.create
  • chat.spaces
取得聊天室 透過使用者驗證機制
  • chat.spaces.readonly
  • chat.spaces
透過應用程式驗證功能:
  • chat.bot
列出聊天室 透過使用者驗證機制
  • chat.spaces.readonly
  • chat.spaces
透過應用程式驗證功能:
  • chat.bot
搜尋聊天室 透過管理員權限進行使用者驗證
  • chat.admin.spaces.readonly
更新聊天室 透過使用者驗證機制
  • chat.spaces
  • chat.import
刪除聊天室 透過使用者驗證機制
  • chat.delete
  • chat.import
透過管理員權限進行使用者驗證
  • chat.admin.delete
完成聊天室匯入程序 透過使用者驗證機制
  • chat.import
尋找即時訊息 透過使用者驗證機制
  • chat.spaces.readonly
  • chat.spaces
透過應用程式驗證功能:
  • chat.bot
成員  
建立成員 透過使用者驗證機制
  • chat.memberships
  • chat.memberships.app
  • chat.import
透過管理員權限進行使用者驗證
  • chat.admin.memberships
取得會員 透過使用者驗證機制
  • chat.memberships.readonly
  • chat.memberships
透過應用程式驗證功能:
  • chat.bot
名單成員 透過使用者驗證機制
  • chat.memberships.readonly
  • chat.memberships
  • chat.import
透過應用程式驗證功能:
  • chat.bot
透過管理員權限進行使用者驗證
  • chat.admin.memberships.readonly
刪除成員 透過使用者驗證機制
  • chat.memberships
  • chat.memberships.app
  • chat.import
透過管理員權限進行使用者驗證
  • chat.admin.memberships
訊息  
建立訊息 透過使用者驗證機制
  • chat.messages.create
  • chat.messages
  • chat.import
透過應用程式驗證功能:
  • chat.bot
接收訊息 透過使用者驗證機制
  • chat.messages.readonly
  • chat.messages
透過應用程式驗證功能:
  • chat.bot
列出訊息 透過使用者驗證機制
  • chat.messages.readonly
  • chat.messages
  • chat.import
更新訊息 透過使用者驗證機制
  • chat.messages
  • chat.import
透過應用程式驗證功能:
  • chat.bot
刪除訊息 透過使用者驗證機制
  • chat.messages
  • chat.import
透過應用程式驗證功能:
  • chat.bot
反應  
建立回應 透過使用者驗證機制
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
  • chat.import
清單回應 透過使用者驗證機制
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
刪除回應 透過使用者驗證機制
  • chat.messages.reactions
  • chat.messages
  • chat.import
媒體與附件  
以檔案附件上傳媒體 透過使用者驗證機制
  • chat.messages.create
  • chat.messages
  • chat.import
下載媒體 透過使用者驗證機制
  • chat.messages.readonly
  • chat.messages
透過應用程式驗證功能:
  • chat.bot
取得訊息附件 透過應用程式驗證功能:
  • chat.bot
使用者讀取狀態
取得使用者的聊天室讀取狀態 透過使用者驗證機制
  • chat.users.readstate
  • chat.users.readstate.readonly
更新使用者的聊天室讀取狀態 透過使用者驗證機制
  • chat.users.readstate
取得使用者的執行緒讀取狀態 透過使用者驗證機制
  • chat.users.readstate
  • chat.users.readstate.readonly
聊天室活動
取得聊天室活動 透過使用者驗證機制
  • chat.messages
  • chat.messages.readonly
  • chat.messages.reactions
  • chat.messages.reactions.readonly
  • chat.memberships
  • chat.memberships.readonly
  • chat.spaces
  • chat.spaces.readonly
列出聊天室事件 透過使用者驗證機制
  • chat.messages
  • chat.messages.readonly
  • chat.messages.reactions
  • chat.messages.reactions.readonly
  • chat.memberships
  • chat.memberships.readonly
  • chat.spaces
  • chat.spaces.readonly

適用於 Chat 應用程式互動事件

下表列出使用者與 Chat 擴充應用程式互動的常見方式,以及是否需要或支援驗證:

情境 不需要驗證 支援使用者驗證功能 支援應用程式驗證功能
接收來自以下內容的訊息:
Chat 應用程式互動事件
Apps Script 回呼
Google Cloud Pub/Sub
回覆訊息:
使用 Chat 應用程式互動事件進行同步
同步,使用 Apps Script 回呼傳回值
傳送新訊息:
含有連入 Webhook