For the complete documentation index, see llms.txt. This page is also available as Markdown.

OAuth 2.0 整合與 Token 自動刷新機制

OAuth 2.0 整合與 Token 自動刷新:MaiAgent 連接 Google Workspace、Salesforce、GitHub 等第三方服務的授權架構、refresh token 管理與最佳實踐。

本文件說明 MaiAgent 平台如何整合 OAuth 2.0 身分驗證協定,並提供自動化的 Token 刷新機制,確保第三方服務整合的安全性與持續可用性。

1. 為何需要 OAuth 整合?

MaiAgent 作為企業級 Agent 平台,需要與各種第三方服務(如 Google Workspace、Salesforce、GitHub 等)進行深度整合。OAuth 2.0 提供了標準化且安全的授權機制,解決了以下關鍵挑戰:

考量面向
傳統密碼儲存方案
OAuth 2.0 授權方案

安全性

需要儲存使用者的帳號密碼,存在洩漏風險

不需要儲存使用者密碼,使用短期存取權杖

權限控制

通常是完整帳號權限,無法細分

可精確控制授權範圍 (Scope),例如僅讀取 Gmail 或僅管理日曆

撤銷機制

需要變更密碼才能撤銷存取

可隨時撤銷特定應用程式的存取權,不影響其他服務

使用者體驗

需要在第三方平台輸入密碼

在可信任的原生介面完成授權,體驗更流暢

常見應用場景:

  • 工具連接器 (Tool Connector): Agent 透過 OAuth 授權存取 Google Drive、Notion、Slack 等服務,執行檔案讀取、訊息發送等操作

  • 資料同步: 自動從 CRM 系統(如 Salesforce)同步客戶資料,無需手動匯入

  • 自動化工作流程: 整合專案管理工具(如 Jira、Asana),由 Agent 協助建立任務、更新狀態


2. MaiAgent OAuth 整合架構

2.1 授權流程優化

MaiAgent 實作了以下關鍵優化:

  • 狀態驗證 (State Validation): 每次授權請求都會生成唯一的 state 參數,防止 CSRF 攻擊

  • 成員層級授權: 支援組織成員個別進行 OAuth 授權,實現更精細的權限管理

  • 靈活的回調處理: connector_id 參數設為可選,支援組織層級或成員層級的授權模式

  • Access Token 驗證: 在 Token 回應中強制驗證 access_token 的存在性,確保授權流程完整性

2.2 Token 安全儲存

MaiAgent 採用多層次的安全措施保護 OAuth Token:

  • 加密儲存: 所有 Token (Access Token、Refresh Token) 在儲存前都經過加密處理

  • 客戶端憑證管理: 儲存 OAuth 應用程式的 client_id 和 client_secret,用於 Token 刷新

  • Token 元資料: 記錄 Token 的到期時間、授權範圍、關聯的使用者和連接器資訊

  • 舊版 Token 處理: 自動排除沒有客戶端憑證的舊版 Token,確保系統僅使用可自動刷新的 Token

2.3 Token 自動刷新機制

存取權杖(Access Token)有效期限通常很短。MaiAgent 用兩種方式在權杖到期前換發新權杖,讓 Agent 與連接器不必每次都請使用者重新授權:定期刷新與使用時刷新。

定期刷新的規則

項目
規則

執行頻率

每 20 分鐘一次

刷新對象

已過期,或 30 分鐘內就會到期的權杖

涵蓋範圍

成員授權的連接器、成員授權的 MCP 工具,以及聯絡人授權的連接器

活躍條件

成員的權杖:近 7 天內有更新,且成員與所屬組織都仍有效;聯絡人的權杖:近 7 天內使用過(從未使用過的以授權時間計)

必要條件

權杖附有 Refresh Token,且保存了 OAuth Client ID;連接器或工具已停用時略過

每次處理量

最多 50 筆,依到期時間先後處理;同一時間只會有一個刷新任務在執行

單筆換發失敗

記錄錯誤,不在同一次執行中重試;仍符合條件時,由下一次排程再試

整個任務執行失敗

固定間隔 60 秒後重試,最多 3 次

授權伺服器拒絕(HTTP 400/401)

這筆授權會被停用,使用者需要重新授權

回應沒有新的 Refresh Token

沿用原本的 Refresh Token

超過 7 天沒有活動的權杖不會被定期刷新;成員停用或離開組織後,他的權杖也不再刷新。之後再使用時,會依下方的「使用時刷新」處理;若 Refresh Token 已失效,需要重新授權。

使用時刷新

Agent 要使用權杖時,若權杖已過期或 60 秒內就會到期,平台會先換發新權杖再呼叫;換發失敗時,這次呼叫拿不到權杖。連接器的授權換發失敗後,會暫停一段時間不再嘗試:從 60 秒開始,每次失敗加倍,最長 1 小時。MCP 工具的權杖(成員授權或組織共用)也在使用前依同樣的 60 秒規則換發。

2.4 成員層級授權支援

MaiAgent 現在支援更精細的成員層級 OAuth 授權:

  • 獨立授權流程: 每個組織成員可以獨立完成 OAuth 授權,無需組織管理員介入

  • 授權元資料: 在 OAuth state 中包含成員相關的上下文資訊,實現授權流程的準確追蹤

  • 重導向 URI 簡化: 優化 OAuth 回調 URI 結構,提升整合的靈活性和可維護性

  • 前端狀態管理: 使用 sessionStorage 管理成員 OAuth 重導向邏輯,確保授權流程的連續性


3. OAuth 整合最佳實踐

3.1 授權範圍 (Scope) 設計原則

在配置 OAuth 應用程式時,應遵循「最小權限原則」:

  • 僅申請必要權限: 如果只需要讀取 Google Calendar,不要申請 Gmail 的寫入權限

  • 明確告知使用者: 在授權前清楚說明為何需要這些權限

  • 支援增量授權: 當需要額外權限時,再次引導使用者進行授權

3.2 Token 生命週期管理

MaiAgent 的 Token 管理遵循以下最佳實踐:

  • Access Token: 短期有效(通常 1 小時),用於實際的 API 呼叫

  • Refresh Token: 長期有效(可能數月至永久),用於獲取新的 Access Token

  • 自動刷新時機: 每 20 分鐘檢查一次,刷新 30 分鐘內到期的權杖;使用時若 60 秒內到期也會先刷新,規則見 2.3

  • Refresh Token 失效: 授權伺服器拒絕換發時,該筆授權會被停用,使用者需要重新授權

3.3 安全性考量

  • HTTPS 強制: 所有 OAuth 相關的通訊都必須透過 HTTPS 進行

  • State 參數驗證: 防止 CSRF 攻擊,確保授權請求的完整性

  • Token 加密儲存: 使用業界標準的加密演算法保護敏感資料

  • 定期審計: 記錄所有 Token 的使用情況,便於安全審查


4. MaiAgent OAuth 整合的技術優勢

4.1 開發整合優勢

  • 標準化介面: 遵循 OAuth 2.0 標準,相容絕大多數第三方服務

  • 簡化配置: 管理員只需提供 OAuth 應用程式的基本資訊,即可完成整合

  • 自動化維護: Token 刷新完全自動化,無需人工介入

  • 彈性部署: 支援組織層級和成員層級的多種授權模式

4.2 安全性與合規優勢

  • 零密碼儲存: 完全避免儲存使用者密碼的安全風險

  • 精細權限控制: 可針對不同服務設定不同的授權範圍

  • 即時撤銷: 管理員或使用者可隨時撤銷授權,變更立即生效

  • 審計追蹤: 完整記錄所有授權和 Token 使用活動

4.3 使用者體驗優勢

  • 無感刷新: Token 自動刷新對使用者完全透明,不影響使用體驗

  • 流暢授權: 在可信任的原生介面完成授權,無需擔心密碼洩漏

  • 持續可用: 只要 Refresh Token 有效,服務就能持續運作


5. 相關技術文檔

參考連結

最後更新於

這有幫助嗎?