驗證及授權 Chat 專用應用程式和 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 上開發」和「建構即時通訊應用程式」。

  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 應用程式是否需要驗證

即時通訊應用程式可以同步或非同步傳送 Google Chat 訊息。也可以代表使用者完成工作,例如建立 Chat 聊天室。

除非 Chat 應用程式在處理回應時呼叫 Chat API 或其他 Google API,否則同步處理訊息不需要驗證。

為了傳送非同步訊息,或代表使用者處理工作,Chat 應用程式會向 Chat API 發出發出 REST 要求的要求,要求進行驗證和授權。

同步處理訊息不需進行驗證

同步訊息是對 Chat 事件的回應。Google Chat 應用程式可在 Chat 應用程式設定頁面中設定並發布檔案,而且不必進行驗證或授權,就能接收及回應事件。

同步即時通訊事件的範例包括:

  • 使用者傳送訊息給 Google Chat 中的即時通訊應用程式。
  • 使用者提及 Chat 應用程式。
  • 使用者叫用其中一個 Chat 應用程式的斜線指令

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

同步訊息不需要授權
圖 2. 同步訊息不需要驗證。

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

每個 Chat 事件都會重複以上程序。

非同步訊息需要驗證

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

透過呼叫 Chat API,Chat 應用程式可在 Google Chat 中張貼訊息,或代表使用者完成工作及存取資料。舉例來說,系統偵測到伺服器服務中斷後,Chat 應用程式可以呼叫 Chat API 以執行下列操作:

  • 建立專門調查及修正服務中斷的 Chat 聊天室。
  • 將使用者新增至 Chat 聊天室。
  • 在 Chat 聊天室中張貼訊息,以便瞭解服務中斷的詳細資料。

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

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

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

Chat API 範圍

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

Google Chat 支援下列範圍:

Google Chat API 範圍 說明
https://www.googleapis.com/auth/chat.bot 允許 Chat 應用程式查看即時通訊和傳送訊息。可存取 Chat 應用程式的所有功能。
https://www.googleapis.com/auth/chat.delete 刪除 Google Chat 中的對話和聊天室,以及移除相關檔案的存取權。
會員  
https://www.googleapis.com/auth/chat.memberships 在 Google Chat 的對話中查看、新增及移除成員。
https://www.googleapis.com/auth/chat.memberships.app 允許 Chat 應用程式在 Google Chat 的對話中新增及移除 (但其他應用程式除外)。
https://www.googleapis.com/auth/chat.memberships.readonly 取得聊天室成員清單,並列出聊天室成員。
訊息  
https://www.googleapis.com/auth/chat.messages 在 Google Chat 中建立、取得、更新、刪除及列出訊息。
https://www.googleapis.com/auth/chat.messages.create 在 Google Chat 中建立訊息及上傳附件。
https://www.googleapis.com/auth/chat.messages.reactions 在 Google Chat 中查看、新增和刪除訊息的回應。
https://www.googleapis.com/auth/chat.messages.reactions.create 在 Google Chat 中回應訊息。
https://www.googleapis.com/auth/chat.messages.reactions.readonly 在 Google Chat 中查看訊息的回應。
https://www.googleapis.com/auth/chat.messages.readonly 在 Google Chat 中取得及列出訊息。
聊天室  
https://www.googleapis.com/auth/chat.spaces 在 Google Chat 中建立對話和聊天室,以及查看或更新中繼資料 (包括記錄設定)。
https://www.googleapis.com/auth/chat.spaces.create 在 Google Chat 中建立對話。
https://www.googleapis.com/auth/chat.spaces.readonly 在 Google Chat 中查看即時通訊和聊天室。

如要進一步瞭解 Google Workspace API 的範圍,請參閱「如何選擇應用程式範圍」。

如需可用範圍清單,請參閱 Google API 的 OAuth 2.0 範圍

必要的驗證類型

Chat 應用程式可透過兩種方式驗證及授權 Chat API:使用者憑證或服務帳戶。

有了使用者憑證授權,Chat 應用程式就能存取使用者資料,並代表使用者執行操作。OAuth 範圍會指定授權的資料和動作。不過,這些 Chat 應用程式無法公開發布。詳情請參閱「發布 Google Chat 應用程式」。

透過應用程式授權,即時通訊應用程式會使用服務帳戶憑證將 API 視為應用程式存取。應用程式授權一律會使用 chat.bot 授權範圍。

如果您是網域管理員,可以將全網域授權委派授予應用程式的服務帳戶存取使用者資料,不必要求每位使用者的同意。設定全網域委派後,您可以使用服務帳戶進行 API 呼叫,以模擬使用者帳戶。雖然服務帳戶用於驗證,但全網域委派功能可模擬使用者,因此稱為「使用者驗證」。凡是需要使用者驗證的功能,都可以使用全網域委派。

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

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

舉例來說,使用應用程式授權呼叫 ListSpaces 方法會傳回應用程式所屬的聊天室清單。使用使用者授權呼叫 ListSpaces 會傳回使用者所屬的聊天室清單。實務上,您的應用程式在呼叫 Chat API 時可能會同時使用兩種授權類型,視所需功能而定。

適用於非同步 Chat API 呼叫

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

方法 支援使用者驗證 支援應用程式驗證 支援的授權範圍
聊天室  
建立聊天室
  • chat.spaces.create
  • chat.spaces
設定聊天室
  • chat.spaces.create
  • chat.spaces
取得聊天室 透過使用者驗證
  • chat.spaces.readonly
  • chat.spaces
使用應用程式驗證
  • chat.bot
列出聊天室 透過使用者驗證
  • chat.spaces.readonly
  • chat.spaces
使用應用程式驗證
  • chat.bot
更新聊天室
  • chat.spaces
刪除聊天室
  • chat.delete
尋找即時訊息 透過使用者驗證
  • chat.spaces.readonly
  • chat.spaces
使用應用程式驗證
  • chat.bot
成員  
建立成員
  • chat.memberships
  • chat.memberships.app
新增成員 透過使用者驗證
  • chat.memberships.readonly
  • chat.memberships
使用應用程式驗證
  • chat.bot
名單成員 透過使用者驗證
  • chat.memberships.readonly
  • chat.memberships
使用應用程式驗證
  • chat.bot
刪除成員
  • chat.memberships
  • chat.memberships.app
訊息  
建立訊息 透過使用者驗證
  • chat.messages.create
  • chat.messages
使用應用程式驗證
  • chat.bot
接收訊息 透過使用者驗證
  • chat.messages.readonly
  • chat.messages
使用應用程式驗證
  • chat.bot
清單訊息
  • chat.messages.readonly
  • chat.messages
更新訊息 透過使用者驗證
  • chat.messages
使用應用程式驗證
  • chat.bot
刪除訊息 透過使用者驗證
  • chat.messages
使用應用程式驗證
  • chat.bot
反應  
建立回應
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
清單回應
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
刪除回應
  • chat.messages.reactions
  • chat.messages
媒體和附件  
以媒體附件的形式上傳媒體
  • chat.messages.create
  • chat.messages
下載媒體檔案 透過使用者驗證
  • chat.messages.readonly
  • chat.messages
使用應用程式驗證
  • chat.bot
取得訊息附件
  • chat.bot

同步進行回應並回應使用者互動

下表列出使用者與 Chat 應用程式互動的常見方式,以及必須通過驗證或獲得支援:

情境 不需驗證 支援使用者驗證 支援應用程式驗證
接收訊息:
Chat 事件
Apps Script 回呼
Google Cloud Pub/Sub
回覆訊息:
透過即時通訊事件同步
同步透過 Apps Script 回呼傳回值
傳送新訊息:
使用連入 Webhook