MCP Server 的 OAuth 2.1 要求
MCP Server 在 OAuth 2.1 中扮演 Resource Server 角色,負責接受帶有 Access Token 的請求並驗證其合法性。以下是 MCP 規範對 Server 的具體要求。
Protected Resource Metadata(RFC 9728)
Section titled “Protected Resource Metadata(RFC 9728)”MCP Server MUST 實作 RFC 9728(OAuth 2.0 Protected Resource Metadata),讓 Client 知道該向哪個 Authorization Server 取得 Token。
回傳的 metadata MUST 包含 authorization_servers 欄位,至少列出一個 Authorization Server。
Discovery 機制
Section titled “Discovery 機制”MCP Server MUST 實作以下至少一種方式讓 Client 取得 metadata:
方式一:WWW-Authenticate Header
在回傳 401 Unauthorized 時,透過 WWW-Authenticate header 提供 resource_metadata URL:
HTTP/1.1 401 UnauthorizedWWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource", scope="files:read"Server SHOULD 在 WWW-Authenticate header 中包含 scope 參數,告訴 Client 該請求需要哪些權限。
方式二:Well-Known URI
在 well-known 路徑上提供 metadata:
/.well-known/oauth-protected-resource/{server-path}(有 path 時)/.well-known/oauth-protected-resource(根路徑)
與 RFC 9728 的差異:RFC 9728 對
resource_metadata參數的要求是 MAY,MCP 將 Server 端提升為 MUST(兩種 discovery 機制至少實作一種)。Client 端則 MUST 兩種都支援——有resource_metadataheader 時優先使用,否則 fallback 到 well-known URI。
Authorization Server 設定
Section titled “Authorization Server 設定”MCP 的 Authorization Server MUST 提供至少一種 Discovery 機制:
- RFC 8414(OAuth 2.0 Authorization Server Metadata)
- OIDC Discovery(OpenID Connect Discovery 1.0)
Authorization Server 的核心要求
Section titled “Authorization Server 的核心要求”| 要求 | 等級 |
|---|---|
| 實作 OAuth 2.1 | MUST |
| 提供 AS Metadata(RFC 8414)或 OIDC Discovery | MUST(至少一個) |
| 支援 Client ID Metadata Documents | SHOULD |
| 支援 Dynamic Client Registration(RFC 7591) | MAY |
| Public Client 的 Refresh Token 必須做 rotation | MUST |
| 核發短效 Access Token | SHOULD |
| 所有端點使用 HTTPS | MUST |
| 精確比對 redirect URI | MUST |
PKCE 支援
Section titled “PKCE 支援”Authorization Server 若使用 RFC 8414:
- MUST 在 metadata 中包含
code_challenge_methods_supported欄位
Authorization Server 若使用 OIDC Discovery:
- MUST 在 metadata 中包含
code_challenge_methods_supported欄位(OIDC 規範本身沒有定義此欄位,但 MCP 要求必須提供)
Client ID Metadata Documents 支援
Section titled “Client ID Metadata Documents 支援”若 Authorization Server 支援 Client ID Metadata Documents:
- SHOULD 在 AS Metadata 中宣告
client_id_metadata_document_supported: true - 收到 URL 格式的
client_id時,SHOULD 前往該 URL 取得 metadata 文件 - MUST 驗證文件中的
client_id與 URL 完全一致 - MUST 驗證 authorization request 中的
redirect_uri有出現在 metadata 的redirect_uris中
Token 驗證
Section titled “Token 驗證”MCP Server 作為 Resource Server,MUST 遵循 OAuth 2.1 Section 5.2 驗證 Access Token。
核心驗證要求
Section titled “核心驗證要求”| 要求 | 等級 |
|---|---|
| 驗證 Token 是否專門為自己核發(audience) | MUST |
| 拒絕非自己 Authorization Server 核發的 Token | MUST |
| 不接受也不轉發其他 Token(Token passthrough 禁止) | MUST |
| 無效或過期的 Token 回傳 401 | MUST |
Token Passthrough 禁止
Section titled “Token Passthrough 禁止”如果 MCP Server 需要呼叫上游 API,它可能同時扮演 OAuth Client 的角色。此時:
- 對上游 API 使用的 Token MUST 是由上游的 Authorization Server 核發的,是一個獨立的 Token
- MUST NOT 把從 MCP Client 收到的 Token 直接轉發給上游
這是為了防止 Confused Deputy Problem。
Scope 管理
Section titled “Scope 管理”收到 Token scope 不足的請求時:
- Server SHOULD 回傳
403 Forbidden,並在WWW-Authenticateheader 中包含:error="insufficient_scope"scope="required_scope1 required_scope2"(所需的 scope)resource_metadata(Protected Resource Metadata URL)
HTTP/1.1 403 ForbiddenWWW-Authenticate: Bearer error="insufficient_scope", scope="files:read files:write", resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource"Server MUST 回傳適當的 HTTP 狀態碼:
| 狀態碼 | 說明 | 使用時機 |
|---|---|---|
| 401 | Unauthorized | 需要授權或 Token 無效 |
| 403 | Forbidden | Scope 不足 |
| 400 | Bad Request | 授權請求格式錯誤 |