使用AgentCore閘道器和MCP客戶端構建安全授權碼流程設定
本文演示如何在Amazon Bedrock AgentCore Gateway上為MCP伺服器實現OAuth授權碼流程作為入站授權機制。完成後,每個AI助手請求都將使用來自組織身份提供者的有效使用者身份令牌進行身份驗證。
在現代開發工作流中,開發者越來越依賴諸如Kiro整合開發環境(IDE)之類的智慧編碼助手來與遠端工具和服務互動。然而,組織需要強大的認證機制來為這些智慧編碼助手和企業模型上下文協議(MCP)伺服器之間提供安全的、身份驗證的訪問。
Amazon Bedrock AgentCore是一項完全託管的服務,幫助你在生產中部署、管理和擴充套件AI代理。其關鍵元件之一AgentCore Gateway提供了路由和保障代理與工具通訊的集中入口點。當AI助手透過Gateway向MCP伺服器發出請求時,該請求必須在處理前經過驗證。這被稱為入站認證。只有授權的使用者和代理才能訪問MCP伺服器暴露的工具和服務。組織通常透過身份提供者(IdP)管理使用者身份,例如Okta、Microsoft Entra ID或Amazon Cognito,它們對使用者進行認證並頒發安全令牌來驗證使用者身份。
本文演示如何在Amazon Bedrock AgentCore Gateway上為MCP伺服器實現OAuth授權碼流程作為入站授權機制。透過本指南,你將擁有一個生產就緒的設定,其中每個AI助手請求都使用來自組織身份提供者的有效使用者身份令牌進行認證。
你將學到什麼
- 授權碼流程如何與作為MCP資源伺服器的AgentCore Gateway配合工作。
- 組織身份提供者的逐步配置。
- AgentCore Gateway入站認證設定。
- 與Kiro IDE客戶端的整合。
解決方案概述
在入站授權碼流程OAuth設定中,AgentCore Gateway充當MCP資源伺服器,在允許AI客戶端訪問任何工具之前需要有效的身份令牌。
下圖顯示了授權碼流程與AgentCore Gateway的端到端架構,包括身份提供者、AI客戶端和MCP伺服器的互動。
圖1:授權碼流程架構圖。
關鍵元件
該解決方案涉及以下元件協同工作以完成認證流程:
- 身份提供者(IdP):管理使用者認證並頒發令牌。上圖引用了Amazon Cognito,但也可以是組織的IdP。
- 使用者:與IdP認證的終端使用者,每個請求驗證其身份。
- Amazon Bedrock AgentCore Gateway:充當OAuth資源伺服器,驗證令牌並將請求代理到MCP伺服器。
- 智慧編碼助手:Kiro IDE,充當OAuth客戶端並管理認證流程。
- MCP伺服器:AI助手需要訪問的後端工具和服務。
- MCP OAuth代理(可選):幫助彌合智慧編碼助手、IdP和MCP伺服器之間的規範標準化差距。MCP OAuth代理提供了支援授權碼流程的標準化。
入站授權碼流程
該流程確保AI助手傳送給MCP伺服器的每個請求都使用屬於使用者的有效身份令牌進行認證。
- MCP客戶端連線 – 智慧編碼助手(例如Kiro IDE)啟動到AgentCore Gateway的MCP端點的連線。
- 認證挑戰 – Gateway檢測到請求缺少有效令牌,並返回HTTP 401,其中包含指向Gateway的OAuth受保護資源後設資料端點(.well-known/oauth-protected-resource)的www-authenticate頭。這遵循了MCP規範的受保護資源後設資料(PRM)模式。
- 發現 – MCP客戶端從Gateway獲取受保護資源後設資料,其中返回IdP的授權伺服器發現URL(例如https://{yourIdPDomain}/oauth2/default/.well-known/openid-configuration)。
- 使用者重定向 – MCP客戶端開啟使用者的系統瀏覽器,並重定向到IdP的授權端點,帶有PKCE挑戰,請求配置的作用域(例如openid profile email offline_access)。
- 使用者認證和同意 – 使用者在IdP登入頁面輸入憑據。IdP驗證使用者身份並提示同意以授權應用程式。
- 授權碼授予 – 批准後,IdP將使用者的瀏覽器重定向到客戶端的本地回撥URL(由客戶端的本地監聽器管理),並附帶授權碼。
- 令牌交換請求 – MCP客戶端將授權碼與PKCE程式碼驗證器一起傳送到IdP的令牌端點。
- 令牌頒發 – IdP驗證授權碼和PKCE驗證器,然後向MCP客戶端返回訪問令牌(以及可選的重新整理令牌)。
- 認證的MCP請求和驗證 – MCP客戶端在後續所有請求的Authorization頭中包含訪問令牌。Gateway驗證令牌的簽名、過期時間、頒發者以及受眾或自定義宣告,然後將請求代理到目標MCP伺服器執行。
圖2:授權碼流程請求序列。
配置概述
下表總結了授權碼流程設定中每個元件所需的配置。詳細的分步說明見技術實施部分。
元件 | 所需配置 --- | --- 1 | 身份提供者 | 建立啟用授權碼和重新整理令牌授予的OpenID Connect(OIDC)Web應用程式。 2 | AgentCore Gateway | 將入站授權設定為JWT。將發現URL配置為IdP的頒發者(例如https://{yourIdPDomain}/oauth2/default/.well-known/openid-configuration)。 3 | Kiro IDE | 在設定 > 聯結器(或透過CLI)中新增Gateway URL。如果Gateway返回帶有正確auth頭的401未授權,客戶端會自動觸發OAuth流程。
技術實施
在架構和流程確定後,配置每個元件。本節提供了配置概述表中引用的三個元件的分步說明:
- 身份提供者:註冊OIDC應用程式並配置授權型別、重定向URI和令牌設定。
- AgentCore Gateway:啟用基於JWT的入站授權並指向IdP的發現端點。
- MCP客戶端(Kiro IDE):將客戶端連線到Gateway URL並驗證端到端OAuth流程。
前提條件
你需要具備以下前提條件才能繼續:
- 已部署AgentCore Gateway的AWS賬戶。
- 具有配置應用程式許可權的身份提供者(IdP)(例如Amazon Cognito、Okta、Auth0或其他企業身份提供者)。
- MCP OAuth代理。
- 本地安裝的Kiro IDE。
- 對OAuth 2.0流程的基本理解。
步驟1:配置組織的身份提供者
在此步驟中,你使用組織的身份提供者註冊一個OIDC應用程式,並將其配置為支援帶有PKCE的授權碼流程。
1.1 建立OIDC應用程式
登入IdP管理控制台並建立一個新的OIDC/OAuth 2.0應用程式整合:
- 登入方式:OIDC。
- 應用程式型別:Web應用程式。
- 名稱:AgentCore Gateway客戶端(或你喜歡的名稱)。
1.2 配置授權型別
啟用以下授權型別:
- 授權碼。
- 重新整理令牌。
1.3 設定重定向URI
新增AI客戶端將使用的回撥URL:
http://localhost:PORT/callback
將PORT替換為客戶端使用的埠。
1.4 配置令牌設定
在IdP應用程式設定中,執行以下操作:
- 令牌生命週期:
- 訪問令牌生命週期:1小時(推薦)。 - 重新整理令牌生命週期:90天(根據安全要求調整)。 - ID令牌生命週期:1小時。
1.5 記錄配置
儲存以下值。它們將在Gateway配置中需要:
- 客戶端ID:在應用程式的“常規”選項卡中找到(Kiro IDE客戶端配置需要)。
- 頒發者URL:IdP的頒發者URL(例如https://{yourIdPDomain}/oauth2/default)。
- 發現URL:IdP的OpenID Connect發現端點(例如https://{yourIdPDomain}/oauth2/default/.well-known/openid-configuration)。
對於此配置:
- 無需客戶端金鑰 – 此流程使用PKCE(用於公共客戶端如桌面應用程式)。Kiro IDE不需要或使用客戶端金鑰。
- 客戶端配置中無IdP端點 – Kiro IDE透過Gateway自動發現OAuth端點,Gateway返回發現URL。你無需在客戶端中直接配置IdP URL。
步驟2:配置AgentCore Gateway
在配置了身份提供者後,下一步是將AgentCore Gateway連線到IdP,以便它可以驗證傳入的令牌。
2.1 設定入站授權模式
配置Gateway使用基於JWT的身份驗證,並指向IdP的發現端點:
示例Gateway配置(根據部署方法調整)
aws agentcore update-gateway \ --gateway-id \ --inbound-auth-type JWT \ --jwt-discovery-url "https://{yourIdPDomain}/oauth2/default/.well-known/openid-configuration" \ --region
2.2 自定義宣告驗證
AgentCore Gateway基於標準OAuth 2.0宣告驗證JWT令牌,並支援自定義宣告驗證以適應不同的IdP實現。Gateway期望令牌包含:
- 標準宣告:iss(頒發者)、aud(受眾)、exp(過期時間)、iat(簽發時間)、client_id(客戶端身份)和scopes(允許的作用域)。
- 客戶端標識:Gateway可以透過多種宣告驗證客戶端身份,具體取決於IdP。
其他IdP可能使用不同的宣告名稱來表示客戶端身份、作用域等(例如cid、azp、scp)。你可以在Gateway中配置自定義宣告驗證以匹配IdP的令牌結構:
- 自定義宣告:EQUALS(參見AgentCore Gateway:設定JWT)。
- 示例:cid EQUALS 0oaz7147z771FZmdQ697(對於使用cid的IdP,如Okta)。
這將驗證令牌是為你的特定應用程式頒發的。
注意:使用自定義宣告驗證時,Gateway的“允許的受眾”欄位可以留空。自定義宣告檢查提供了必要的客戶端身份驗證。
2.3 理解Gateway令牌驗證
現在Gateway已配置了IdP的發現URL和宣告規則,我們來看它如何在執行時驗證傳入令牌。
AgentCore Gateway設計為與使用者獲取OAuth令牌的方式無關。Gateway不區分透過以下方式獲取的令牌:
- 客戶端憑證流程,應用程式直接進行身份驗證。
- 授權碼流程,使用者明確進行身份驗證並授予同意。
Gateway只要求請求中呈現的OAuth令牌基於Gateway設定期間配置的引數是有效的:
- 令牌簽名:使用IdP發現URL中的公鑰進行驗證。
- 令牌過期:驗證令牌未過期。
- 頒發者(iss宣告):與預期的IdP頒發者匹配。
- 受眾或自定義宣告:驗證令牌是為該特定Gateway或應用程式頒發的。
- 標準OAuth宣告:檢查所需宣告,如iat、exp等。
無論使用者是透過客戶端憑證流程、授權碼流程還是其他OAuth授權型別獲得令牌,Gateway對所有令牌一視同仁。只要令牌透過Gateway設定中配置的驗證檢查,請求就被授權。透過這種靈活性,你可以選擇適合你的用例的身份驗證流程,同時在Gateway級別保持一致的安全性。
2.4 驗證Gateway配置
測試Gateway端點是否可訪問並要求身份驗證:
使用實際令牌測試身份驗證
[為控制AI成本而截斷]