強化你的業務:連接 AI 工具到現有服務,帶有存取控制
了解如何透過個人存取權杖 (Personal Access Tokens) 和模型上下文協議 (Model Context Protocol, MCP) 安全地將 AI 工具連接到你的現有服務,並提供完整的原始碼和實用範例。
歡迎來到將 AI 工具與現有服務連接的存取控制指南!
我們將探討如何準備你的現有服務以整合 AI 工具,特別是透過與 LLM 和各種 AI 代理的整合(使用 模型上下文協議,同時解決存取控制挑戰。
通過這個指南,你將獲得:
- 無縫的 AI 整合:學習如何將 AI 工具與各種服務連接,讓你的數據和功能在 AI 環境中使用
- 增強的 API 安全性:改善 API 接口,以有效的存取控制來保護數據及用戶隱私
- 個性化 AI 體驗:透過個人存取權杖為每個使用者創造獨特的 AI 輔助體驗
我們提供完整的教程資源,完整的示範項目 原始碼(包含前端、後端和 MCP 伺服器),甚至包含實用指南來幫助你從頭開始建立 AI 準備好的服務。
這個指南將如何提升你的業務:
- 競爭優勢:提升你的服務技術能力和用戶體驗,以在競爭激烈的市場中脫穎而出
- 提高用戶價值:讓用戶透過 AI 工具發掘產品更深層的價值,以增加保留率和滿意度
- 準備迎接未來:無縫將你的服務整合進 AI 生態系,為即將到來的 AI 驅動商業景觀做好準備,並開啟創新的增長路徑
讓我們開始吧!
什麼是 MCP 及其如何連接 AI 工具到你的服務
MCP (模型上下文協議) 是一個開放、通用的協議,標準化了應用程序如何提供上下文信息給大型語言模型(LLM)。
MCP 由多個關鍵組件協同工作來使 AI 工具能夠存取你的服務:
在本指南中,你只需知道 MCP 伺服器是連接服務和 AI 工具的關鍵點。它負責提供一系列工具供 LLM 使用,而這些工具將與你的服務互動。關於 MCP 的更多詳情,你可以參考 什麼是 MCP (模型上下文協議) 及其工作原理。在這裡,我們只會集中於 MCP 伺服器。
我們將以已整合角色基於存取控制 (RBAC) 策略的內容管理系統 (CMS) 作為範例。我們將為其創建一個 MCP 伺服器,並定義一個 get-available-article-count
工具,讓 LLM 可以檢索當前用戶在 CMS 中可用的文章數量:
這是將 MCP 伺服器連接到你的服務的關鍵代碼。在此工具實現中,它向服務的 api/articles
端點發出請求並返回結果。
然而,這還遠遠不夠,因為你的服務 API 可能並非公開。每個端點都需要存取控制,不同的用戶可以存取不同的資源和數據。
所以接下來,我們將討論如何為服務添加存取控制。
如何為 MCP 伺服器實施存取控制
重要的是要理解,通過 AI 工具存取你的系統的用戶和直接使用你的系統的用戶是一樣的——當他們通過 AI 工具進行互動時,MCP 伺服器充當了他們的代表。
因此,當用戶通過 AI 工具存取你的服務時,會出現兩個實際的存取控制挑戰:
- MCP 伺服器如何像用戶一樣登入系統?
- 你的系統是否應該重新設計其整個存取控制機制以適應 MCP 伺服 器?這將會是巨大的成本和努力,特別是當你的原始系統已經有自己的身份驗證機制時
解決這些問題的關鍵是:
用戶如何讓 MCP 伺服器在不使用其憑證和交互式登入的情況下授予服務的存取權限?
如果你能解決這個問題,你可以直接通過 MCP 伺服器與你的服務進行互動,而你的服務可以繼續使用為用戶以前設計的存取控制機制,而無需為 MCP 伺服器重新設計新的系統!
但是這可能嗎?
當然可以!我們可以通過使用 個人存取權杖 完美地解決這個問題!
個人存取權杖 (PATs) 提供了一種安全的方法,讓用戶在不使用其憑證和交互式登入的情況下授予存取權杖。這對於需以程式化方式存取資源的 CI/CD、腳本或應用程式非常有幫助。
這就是工作流程的樣子:
因此,只要你的系統支持個人存取權杖 (PATs),你就可以在不重新設計身份驗證機制的情況下,完美解決 AI 工具和現有服務之間的存取控制挑戰,同時確保數據安全性和用戶隱私保護。
現在,讓我們來看看如何在實踐中實現這一點。
MCP 伺服器存取控制的實施
在本節中,我們將使用現有 CMS 系統為基礎來實施 MCP 伺服器存取控制。
你可以查看完整的 CMS 範例教程和原始碼在 RBAC in practice: Implementing secure authorization for your application,但這不是必修的,我們會在這裡涵蓋所有必要的原則。
此 CMS 範例基於 Logto,這是一個流行的開源身份平台,提供了全面的身份驗證和授權解決方案,但技術實現不是本文的重點。
為你的服務設計許可和存取控制策略
實施存取控制的第一步是為系統設計許可和存取控制政策。
在我們的 CMS 範例中,我們基於 RBAC (角色基於存取控制) 設計了以下 API 端點,並指定了存取每個端點所需的權限:
項點 | 存取控制邏輯 |
---|---|
GET /api/articles | - 任何具有 list:articles 許可權者,或作者可查看自己的文章 |
GET /api/articles/:id | - 任何具有 read:articles 許可權者,或該文章的作者 |
POST /api/articles | - 任何具有 create:articles 許可權者 |
PATCH /api/articles/:id | - 任何具有 update:articles 許可權者,或該文章的作者 |
DELETE /api/articles/:id | - 任何具有 delete:articles 許可權者,或該文章的作者 |
PATCH /api/articles/:id/published | - 只有具有 publish:articles 許可權的用戶 |
系統的許可設計如下:
許可 | 描述 |
---|---|
list:articles | 查看系統中所有文章的名單 |
read:articles | 閱讀任何文章的完整內容 |
create:articles | 創建新的文章 |
update:articles | 修改任何文章 |
delete:articles | 刪除任何文章 |
publish:articles | 更改發布狀態 |
基於這些許可權,我們為 CMS 系統定義了以下角色:
許可權/角色 | 👑 管理員 | 📝 發布者 | ✍️ 作者 |
---|---|---|---|
描述 | 完整系統存取,進行全面內容管理 | 可以查看所有文章並控制發布狀態 | 能在系統創建新文章 |
list:articles | ✅ | ✅ | ❌ |
read:articles | ✅ | ✅ | ❌ |
create:articles | ✅ | ❌ | ✅ |
update:articles | ✅ | ❌ | ❌ |
delete:articles | ✅ | ❌ | ❌ |
publish:articles | ✅ | ✅ | ❌ |
注意:作者無論角色許可如何,均自動擁有閱讀/更新/刪除自己文章的許可權。
接下來,我們將在系統中為用戶分配角色(以 CMS 展示為例):
用戶 | 角色 |
---|---|
Alex | 管理員 |
Bob | 發布者 |
Charlie | 作者 |
在 Logto 中,如上述 RBAC in practice 文章所提及,我們為用戶設置了角色。
將存取控制政策應用於你的服務 API
這是用戶登入我們 CMS 範例的方式:
因此,將存取控制應用於你的服務 API 如下簡單,只需在步驟 9 加入用於驗證存取權杖並檢查許可權的中介層即可。
核心實現如下(完整實現參見 RBAC sample - 後端):
將中介層應用於需要身份驗證的 API 端點:
我們現在已經為 CMS 系統增加了存取控制並為用戶分配了角色。
在用戶登入並獲取 CMS API 的存取權杖後,他們可以使用此權杖存取 CMS API。存取權杖包含用戶的許可信息。這讓我們能夠根據用戶許可來控制返回的數據。
我們的下一步是實現 MCP 伺服器以使用個人存取權杖。
理解個人存取權杖如何代表用戶
參閱上方的 CMS 身份驗證流程,用戶在登入後獲得用於 CMS API 的存取權杖。此存取權杖是他們存取 CMS API 的憑證。
我們只需獲取類似用戶登入後獲得的存取權杖。然後我們可以用它存取 CMS API。
這就是個人存取權杖的作用。它們幫助我們獲得與用戶通常在登入後獲得的類似存取權杖。
這是我們需要做的:
- 為一個用戶創建一個個人存取權杖
- 使用此個人存取權杖向驗證服務的權杖端點請求一個交換權杖。這樣我們可以獲得類似用戶在登入後獲得的存取權杖
- 在我們的 MCP 服務工具中使用此存取權杖來存取 CMS API
在這個例子中,我們用 Logto 進行演示,因為 Logto 支持個人存取權杖和權杖交換。如果你未使用 Logto,可以依照這個方法設計你的個人存取權杖支持。
為用戶創建個人存取權杖
在 Logto 控制台 > 用戶管理中,你可以從用戶個人細節頁面創建個人存取權杖:
創建個人存取權杖時,你可以根據需要設置過期時間。
在 MCP 伺服器中使用個人存取權杖
既然我們有了用戶的個人存取權杖,我們可以在 MCP 伺服器中使用它。
首先,根據 Logto 的 個人存取權杖文件,我們將從 Logto 的權杖端點獲取用於存取 CMS API 的存取權杖。完整原始碼可參閱 這裡。
接著在 MCP 伺服器中,我們使用 exchangeAccessToken
函數獲得的存取權杖來獲取 CMS API 的數據。
這樣,MCP 伺服器無需用戶的登入憑證即可存取 CMS API。取而代之地,它使用用戶的個人存取權杖。
你可以在 RBAC sample - mcp-server 找到完整的代碼。
要了解如何在本地使用 Claude Desktop 部署該 MCP 伺服器,請查看:MCP 伺服器部署指南。
你也可以將此伺服器部署到各種 AI IDE,例如 Cursor、Cline、Windsurf 等。
測試存取控制
讓我們在 Claude Desktop 中測試此實現。
在我們的 CMS 中,Alex 和 Charles 各自創建了一篇文章。
由於 Alex 擁有管理員角色,他可以查看所有文章。Charles 作為作者,只能查看自己的文章。
當我們問 Claude 有多少可用文章時,Claude 將使用 get-available-article-count
工具並要求我們的權限:
當我們在 MCP 中使用 Alex 的個人存取權杖並詢問 Claude 多少可用文章時,Claude 調用 get-available-article-count
工具並告訴我們有兩篇文章。
當我們切換到 Charles 的個人存取權杖時,詢問同樣的問題,Claude 告訴我們只有一篇文章。
太棒了!我們成功地使用個人存取權杖來存取 CMS API 並獲得正確的數據。
這正是我們所期待的:我們為每個用戶創建個人存取權杖,用戶在配置他們的 MCP 伺服器時,我們為他們創建了個性化的 AI 體驗。
讓我幫你撰寫總結部分:
總結
在本指南中,我們探討 了如何在維持適當存取控制的同時將 AI 工具連接到你的現有服務。我們以 RBAC 實現的 CMS 系統為例,展示了個人存取權杖 (PATs) 如何優雅地解決身份驗證問題。
你可以在我們的 RBAC sample repository 中找到這個實現的完整原始碼,其中包含 CMS 後端、前端和 MCP 伺服器的實現。
在向用戶分發你的 MCP 伺服器時,請記得保持個人存取權杖可配置。這樣每個用戶可以:
- 在 MCP 伺服器中配置他們自己的 PAT
- 根據其特定許可權存取資源
- 獲得反映其角色和存取級別的個性化 AI 體驗
這種方法確保你的 AI 整合在提供基於用戶許可和系統角色的個性化體驗的同時保持安全。
祝願你在這次 AI 整合之旅中業務獲得巨大成功!願你的服務隨著這些新的 AI 功能蓬勃發展和增長!🚀