使用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成本而截斷]