MCP OAuth 服务端实现

使用说明(Markdown 格式):

  • 项目简介

    • 该仓库实现了一个基于 MCP 的后端服务组件,聚焦于通过 OAuth 2.1 与 MCP 规范对接,提供资源元数据发现、授权服务器元数据发现、令牌服务、动态客户端注册以及相关的安全特性等能力,旨在为使用方的 MCP 客户端提供安全、可扩展的上下文服务。
  • 主要功能点

    • 资源元数据暴露(Protected Resource Metadata):按 MCP 2025-11-25 规范提供资源标识、授权服务器、可用的 Bearer 传输方式、以及可选的作用域等信息。
    • 授权服务器元数据与 OpenID 配置:提供标准的 OAuth/OpenID 发现端点,支持多租户 issuers 的路径插入和路径追加等发现模式。
    • 令牌端点与回调处理:实现授权码、刷新令牌、令牌撤销、令牌自省、以及回调处理等核心流程。
    • 客户端注册(动态注册 RFC 7591):支持有身份验证和无身份验证下的客户端注册,以及对受信任方案的支持。
    • 安全与可观测性:PKCE(S256 仅)、刷新令牌轮换、详细的审计日志、OpenTelemetry 指标、CORS、WWW-Authenticate 头等 MCP 2025-11-25 的合规要素。
    • MCP 的多租户元数据发现:Root 与子路径的资源元数据路由注册,以及按路径的匹配和覆盖(Long,est-prefix 匹配等)。
  • 安装步骤

    • 该仓库为 Go 语言实现的库。可通过 Go 工具链将其集成到你的 MCP 应用中,示例用法在 README 和单元测试中提供。典型集成方式是在你的应用中用提供的 Server、Handler 等组件构建一个 HTTP 服务并挂载 MCP 相关路由。
  • 服务器配置须知

    • MCP 服务器配置通常通过一个包含服务器端元数据、资源元数据、SOP、CORS、审计与加密等字段的配置对象完成。客户端在连接 MCP 服务器时需要提供一个包含 server name、command、args 的 JSON 配置,用于描述要启动的 MCP 服务器实例(此处描述为示意性信息,具体实现可在你的部署环境中通过你的应用启动)。
    • 示例(JSON 配置描述,非代码片段,便于理解): { "server_name": "mcp-oauth-server", "command": "/usr/local/bin/mcp-oauth-server", "args": [ "--issuer", "https://auth.example.com", "--resource", "https://mcp.example.com", "--cors.AllowedOrigins", "https://app.example.com", "--security.EncryptionKey", "<32-byte-base64-或原始字节密钥>", "--registrations.max-per-ip", "10", "--logging.level", "info" ], "description": "MCP 服务器实例配置,覆盖需暴露的 MCP 元数据端点与令牌端点行为。" } 注释说明:
    • server_name: 服务器实例的名称,便于区分不同实例。
    • command: 启动 MCP 服务器的可执行文件路径(需在实际环境中提供一个可运行的实现)。
    • args: 传递给服务器的启动参数,例如发行者、资源标识、CORS 设置、加密密钥等。
    • 其余字段用于说明运行时行为,实际使用时请以你的应用实现为准,MCP 客户端本身并不需要这些配置信息的源码。
  • 基本使用方法

    • 在你的应用中引入并组合该库提供的 Server、Handler 等组件,启动一个 HTTP 服务并挂载 MCP 相关端点(资源元数据、授权服务器元数据、令牌端点、回调等)。
    • 使用 MCP 客户端访问以下端点以获取元数据、资源信息、以及进行鉴权:
      • /.well-known/oauth-protected-resource
      • /.well-known/oauth-authorization-server
      • /.well-known/openid-configuration
    • 通过相应的令牌端点进行授权、令牌交换、刷新、校验与撤销等操作。
    • 如需多租户场景,请按 MCP 2025-11-25 规范配置 Path 插入与 Path-Appending 的 OpenID/OAuth 发现端点。
  • 重要注意

    • MCP 服务器实现的核心在于提供资源元数据、授权服务器元数据、以及与令牌生命周期相关的完整能力边界,确保与 MCP 客户端的交互符合规范并具备安全性。
    • 实际部署时,请结合你的基础设施进行证书、密钥、以及网络安全策略的配置,并确保全链路的可观测性与审计能力。

服务器信息