前言
隨著 AI 應用的普及,MCP(Model Context Protocol)Server 讓 AI 助理能夠透過標準化的方式呼叫企業內部工具與資料。然而,在企業環境中部署 MCP Server 時,身份驗證是不可或缺的一環——不能讓任何人都能直接存取敏感的內部資源。
本文說明如何將 Remote MCP Server(以 .NET / C# 實作)與 Azure AD(Entra ID)進行 OAuth 2.0 整合,包含:
- Entra ID 應用程式的設定流程(Server App & Client App)
- .NET 程式中的 JWT 驗證設定
- 使用 IIS 部署的注意事項
- 使用 MCP Inspector 進行測試
- 常見錯誤
AADSTS9010010的解法
適用情境:已有 Azure AD(Entra ID)Tenant、想在企業內部安全地對外提供 MCP Server 的 .NET 開發者。
實作
應用程式註冊(App registrations)
1.建立 MCP Server App
1.1.在 Entra ID 的 應用程式註冊 中,建立 MCP Server App
在Expose an API新增Scope,並填入 consent 的說明,如下,
Application ID URI設定為https://mcpserver.公司domain/mcp(mcp server 的 url)
1.2.修改Manifest
在 api 區段中,把"requestedAccessTokenVersion": null改成"requestedAccessTokenVersion": 2
2.建立 MCP Client App
2.1.在 Entra ID 的 應用程式註冊 中,建立 MCP Client App
2.2.在 API permissions 加入MCP Server App的Scope,如下,
2.3.在Authentication中在Web or SPA or … 中設定Redirect URI,例如http://localhost:6274/oauth/callback/debug …
- 註: 建議依不同 Client App 的Type建立不同的 App
程式實作
Entra ID Authority V2 URL 為 https://login.microsoftonline.com/{tenantId}/v2.0, Audience 為 MCP Server App 的 應用程式 (用戶端) 識別碼 例如:34dc497e-b607-4ee0-b552-2b015c547454
Program.cs 設定如下:
1 |
|
部署
將程式部署到根目錄下,如果是IIS的話,可以建立多個站台透過 HTTP Host Header 在 IIS 設定多個站台綁定。
如果在Local測試可以調整 hosts 檔案,加入127.0.0.1 mcp-server-url 來測試。
因為Metadata Discovery會在根目錄下去找,例如https://host/.well-known/oauth-protected-resource
測試
modelcontextprotocol/inspector
1.執行npx @modelcontextprotocol/inspector會開啟inspector,
2.url輸入mcp-server-url
3.Transport Type選擇Streamable HTTP
4.Connection Type 選 Direct
5.Authentication區段中的client ID輸入MCP Client App的ClientId
6.按下Open Auth Settings來進行OAuth Authentication測試,
在OAuth Flow Progress區段中,可以依Metadata Discovery、Client Registration、Preparing Authorization … 按下Continue 按鈕 來進行一步步的測試。如下,
AADSTS9010010 錯誤
The resource parameter doesn’t match requested scopes
解法:scope 必須包含 resource prefix,例如resource=https://host/mcp, scope=https://host/mcp/你的scope
- 註: 要注意 path
https://host/會不會多一個 / ,變成了https://host//
參考資源
Building Your First MCP Server with .NET: A Developer’s Guide to Model Context Protocol
Release v1.0 of the official MCP C# SDK