OAuth服务器与身份代理服务

一个基于Cloudflare Workers的Model Context Protocol (MCP)服务器,支持远程MCP连接,内置PingOne功能,作为OAuth服务器和OIDC客户端,用于连接AI代理与受PingOne保护的API。

  • by EPortman-Ping
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 EPortman-Ping/remote-mcp-pingone

使用说明

模型上下文协议(MCP)服务器+PingOne

这是一个 模型上下文协议(MCP) 支持远程MCP连接的服务器,内置PingOne。

MCP服务器(由 Cloudflare员工):

  • 充当 OAuth服务器 您的MCP客户
  • 充当 OIDC客户端 到您的PingOne环境

[!警告] 这是一个演示模板,旨在帮助您快速入门。虽然我们已经实施了几种安全控制, 在部署到生产环境之前,您必须实施所有预防性和深度防御安全措施。请查看我们的综合安全指南: 保护MCP服务器

入门指南

本演示展示了MCP服务器如何代表最终用户安全地调用受保护的API。首先:

  1. 部署 所有API.
  2. 部署 OIDC MCP服务器 (适用于Cloudflare管理同意)或 DaVinci OIDC MCP服务器 (PingOne DaVinci管理同意书)。

[!注意] 这里使用的API可以是任何PingOne安全的API。在本例中,我们使用Cloudflare workers API,但目标是演示如何使用此体系结构将任何API连接到MCP服务器。

从Cloudflare Workers AI LLM Playground访问远程MCP服务器

引导到 https://playground.ai.cloudflare.com 并使用以下URL模式连接到您的MCP服务器:

https://remote-mcp-pingone(-dv).<your-subdomain>.workers.dev/mcp

从Claude Desktop访问远程MCP服务器

打开克劳德桌面,导航到设置->开发人员->编辑配置。这将打开控制Claude可以访问哪些MCP服务器的配置文件。

用以下配置替换内容。重新启动Claude Desktop后,将打开一个浏览器窗口,显示您的OAuth登录页面。完成身份验证流程,授予Claude访问您的MCP服务器的权限。授予访问权限后,这些工具将可供您使用。

{
  "mcpServers": {
    "todo-mcp": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://remote-mcp-pingone(-dv).<your-subdomain>.workers.dev/mcp"
      ]
    }
  }
}

一旦工具(下🔨) 在界面中显示,您可以要求Claude使用它们。例如:“你能告诉我我的待办事项列表中有什么吗?”。Claude应该调用该工具并显示MCP服务器生成的结果。

它是如何工作的?

这种架构将Cloudflare workers的无状态特性与经过身份验证的MCP会话的有状态要求联系起来。

OAuth提供者(身份代理)

OAuth提供者库直接在Cloudflare worker中实现了兼容的OAuth 2.1服务器。它充当安全网关,执行双重角色:

  • OAuth服务器: 它管理与MCP客户端的直接关系,处理注册和颁发会话令牌。
  • OIDC客户: 它与PingOne协调上游联盟,交换调用受保护API所需的访问令牌的授权码。

Cloudflare代理(州和交通)

MCP服务器扩展了McpAgent类,该类自动将MCP逻辑封装在持久对象中。这可以处理复杂的基础设施要求:

  • 会话持久性: 它为每个MCP连接创建一个专用的隔离环境,并将PingOne令牌安全地保存在持久对象的存储中(this.props).
  • 流式HTTP: 代理自动处理网络传输层。它接受来自MCP客户端的标准HTTP请求,并将其路由到正确持久对象中的MCP工具。

MCP SDK(工具逻辑)

官方的 @modelcontextprotocol/sdk 用于定义MCP服务器的实际能力。在代理内部,有一个McpServer实例:

  • 处理协议: 管理JSON-RPC消息和工具定义的序列化。
  • 启用流媒体: 实现可流式HTTP,以支持通过单个端点进行实时双向通信。

用例和可扩展性

此架构演示了将AI代理连接到PingOne保护的API的模式。通过充当OAuth代理,MCP服务器使LLM能够代表经过身份验证的用户与服务交互,而无需修改下游API的现有权限模型。无论是使用Cloudflare直接同意方法还是DaVinci编排流程,该项目都提供了一个配置指南,用于在保持基于身份的访问控制的同时,实现与企业数据的自然语言交互。