客户端注册
社区译文;来源: MCP 80041ab0
MCP 支持三种客户端注册机制。请根据使用场景进行选择:
- Client ID Metadata Documents:客户端与服务器此前没有关联时使用(最常见)
- 预注册:客户端与服务器已经存在关联时使用
- 动态客户端注册:用于向后兼容或满足特定要求
支持全部选项的客户端 SHOULD 按以下优先级选择:
- 如果客户端已有该服务器的预注册客户端信息,则使用该信息
- 如果授权服务器通过 OAuth Authorization Server Metadata 中的
client_id_metadata_document_supported表明支持 Client ID Metadata Documents,则使用该机制 - 如果授权服务器通过 OAuth Authorization Server Metadata 中的
registration_endpoint表明支持动态客户端注册,则将其作为回退方案 - 如果没有其他可用选项,则提示用户输入客户端信息
Client ID Metadata Documents
MCP 客户端和授权服务器 SHOULD 按照 OAuth Client ID Metadata Document 的规定支持 OAuth Client ID Metadata Documents,以完成客户端注册。
这种方法允许客户端使用 HTTPS URL 作为客户端标识符,该 URL 指向包含客户端元数据的 JSON 文档。它解决了 MCP 中服务器与客户端通常不存在预先关联关系的场景。
实现要求
支持 Client ID Metadata Documents 的 MCP 实现 MUST 遵循 OAuth Client ID Metadata Document 中规定的要求。主要要求包括:
对于 MCP 客户端:
- 客户端 MUST 按照 RFC 要求,在 HTTPS URL 上托管元数据文档
client_idURL MUST 使用 “https” scheme 并包含路径组件,例如https://example.com/client.json- 元数据文档 MUST 至少包含以下属性:
client_id、client_name、redirect_uris - 客户端 MUST 确保元数据中的
client_id值与文档 URL 完全一致 - 客户端 MAY 使用
private_key_jwt进行客户端认证(例如向 token endpoint 发起请求),并按照 Client ID Metadata Document 第 6.2 节的说明配置适当的 JWKS
对于授权服务器:
- 遇到 URL 格式的 client_id 时,SHOULD 获取对应的元数据文档
- MUST 验证所获取文档中的
client_id与 URL 完全一致 - SHOULD 遵循 HTTP 缓存 Header 缓存元数据
- MUST 根据元数据文档中的 URI 验证授权请求提供的 redirect URI
- MUST 验证文档结构是有效 JSON 且包含必填字段
- SHOULD 遵循 Client ID Metadata Document 第 6 节及 Client ID Metadata Document 安全性中的安全注意事项
元数据文档示例
{
"client_id": "https://app.example.com/oauth/client-metadata.json",
"client_name": "Example MCP Client",
"client_uri": "https://app.example.com",
"logo_uri": "https://app.example.com/logo.png",
"redirect_uris": [
"http://127.0.0.1:3000/callback",
"http://localhost:3000/callback"
],
"grant_types": ["authorization_code"],
"response_types": ["code"],
"token_endpoint_auth_method": "none"
}Client ID Metadata Documents 流程
下图展示了使用 Client ID Metadata Documents 时的完整流程:
sequenceDiagram
participant User
participant Client as MCP Client
participant Server as Authorization Server
participant Metadata as Metadata Endpoint<br/>(Client's HTTPS URL)
participant Resource as MCP Server
Note over Client,Metadata: Client hosts metadata at<br/>https://app.example.com/oauth/metadata.json
User->>Client: Initiates connection to MCP Server
Client->>Server: Authorization Request<br/>client_id=https://app.example.com/oauth/metadata.json<br/>redirect_uri=http://localhost:3000/callback
Server->>User: Authentication prompt
User->>Server: Provides credentials
Note over Server: Authenticates user
Note over Server: Detects URL-formatted client_id
Server->>Metadata: GET https://app.example.com/oauth/metadata.json
Metadata-->>Server: JSON Metadata Document<br/>{client_id, client_name, redirect_uris, ...}
Note over Server: Validates:<br/>1. client_id matches URL<br/>2. redirect_uri in allowed list<br/>3. Document structure valid<br/>4. (Optional) Domain allowed via trust policy
alt Validation Success
Server->>User: Display consent page with client_name
User->>Server: Approves access
Server->>Client: Authorization code via redirect_uri
Client->>Server: Exchange code for token<br/>client_id=https://app.example.com/oauth/metadata.json
Server-->>Client: Access token
Client->>Resource: MCP requests with access token
Resource-->>Client: MCP responses
else Validation Failure
Server->>User: Error response<br/>error=invalid_client or invalid_request
end
Note over Server: Cache metadata for future requests<br/>(respecting HTTP cache headers)
公布 CIMD 支持能力
授权服务器在 OAuth Authorization Server metadata 中包含以下属性,表明它支持使用 Client ID Metadata Documents 的客户端:
{
"client_id_metadata_document_supported": true
}MCP 客户端 SHOULD 检查该能力;如果不可用,则 MAY 回退到动态客户端注册或预注册。
预注册
MCP 客户端 SHOULD 支持使用静态客户端凭据的选项,例如由预注册流程提供的凭据。具体可以是:
- 硬编码一个专供该 MCP 客户端与该授权服务器交互时使用的 client ID(以及适用时的客户端凭据);或者
- 在用户自行注册 OAuth 客户端后,通过 UI 允许用户输入这些信息(例如通过服务器托管的配置界面完成注册)。
动态客户端注册
MCP 客户端和授权服务器 MAY 支持 OAuth 2.0 Dynamic Client Registration Protocol RFC7591,使 MCP 客户端无需用户交互即可获取 OAuth client ID。保留此选项是为了向后兼容早期版本的 MCP 授权规范。
应用类型与 Redirect URI 约束
当授权服务器支持 OpenID Connect(OIDC)和动态客户端注册时,它们可能根据 OpenID Connect Dynamic Client Registration 1.0 中定义的 application_type 参数,对 redirect URI 实施额外约束。
MCP 客户端在动态客户端注册期间 MUST 指定适当的 application_type。在 OIDC 下省略该参数时,默认值为 "web",这可能与原生应用风格的 redirect URI 冲突;非 OIDC 服务器可以安全地忽略该参数。
- 原生应用(桌面应用、移动应用、CLI 工具,以及通过
localhost访问的本地托管 Web 应用)SHOULD 使用application_type: "native" - Web 应用(由非本地主机提供的远程浏览器应用)SHOULD 使用
application_type: "web"
当授权服务器实现 OIDC 时,MCP 客户端 MUST 准备好处理由 redirect URI 约束导致的注册失败。注册请求被拒绝时,客户端 SHOULD 向用户或开发者呈现有意义的错误。客户端 MAY 使用调整后的 application_type 重试注册,或改用符合授权服务器对相应应用类型要求的 redirect URI。
授权服务器绑定
使用预注册凭据,或持久化动态客户端注册所得客户端凭据的客户端,MUST 将这些凭据与签发它们的特定授权服务器关联,并以授权服务器的 issuer 标识符作为键。当授权服务器发生变化时(通过更新后的受保护资源元数据检测),客户端 MUST NOT 重用其他授权服务器的客户端凭据,并且 MUST 向新的授权服务器重新注册。
预注册凭据天然属于特定授权服务器。如果受保护资源元数据指明的授权服务器与凭据注册时使用的服务器不再一致,客户端 SHOULD 呈现错误,而不是静默尝试使用不匹配的凭据。
基于 Client ID Metadata Documents 的 client ID 可在不同授权服务器之间移植,因为它们是由授权服务器按需解析的自托管 HTTPS URL。授权服务器发生变化时,无需重新注册。