MCP Server 之旅第 5 站:服务鉴权体系解密

简介: 本文深入探讨了MCP协议在授权机制上的演进与函数计算对MCP场景下Auth的支持。文章从MCP协议的授权发展入手,分析了2024-11-05无授权支持到2025-03-26基于OAuth 2.1的授权机制,再到最新Draft中引入Protected Resource Metadata(RFC9728)的变化。同时,详细介绍了函数计算如何通过Bearer认证方式解决MCP场景下的授权问题,帮助开发者降低开发成本并提升安全性。

作者:梅茜

背景

在系列文章第4篇 MCP Server On FC 之旅4: 长连接闲置计费最高降低87%成本的技术内幕,我们解构了FC在MCP场景下通过闲置计费能力为用户降本的技术内幕和使用方式。本文将从Auth的角度,介绍MCP协议对Auth的支持以及函数计算为适配MCP协议Auth目前提供的能力和之后会开放的能力。

MCP授权机制

MCP在最开始的2024-11-05版本中并没有支持授权,在2025-03-26中,MCP协议支持了基于OAuth2.1的授权机制,在最新的MCP Draft中,社区对基于OAuth 2.1的授权协议内容进行了调整,三个协议版本的授权协议基于的OAuth标准见下表。本节会先简单介绍MCP协议所使用到的几个OAuth协议/子协议,然后分别介绍MCP 2025-03-26版本和最新Draft的授权过程。

MCP版本 是否支持授权 基于的授权协议
2024-11-05 -
2025-03-26 OAuth 2.1 IETF草案
OAuth 2.0 授权服务器元数据 (RFC8414)
OAuth 2.0 动态客户端注册协议 (RFC7591)
最新Draft OAuth 2.1 IETF 草案
OAuth 2.0 授权服务器元数据 (RFC8414)
OAuth 2.0 动态客户端注册协议 (RFC7591)
OAuth 2.0 受保护资源元数据 (RFC9728)

MCP Auth涉及的相关OAuth协议介绍

如果您对如下的协议已经有所了解,可以直接查看后续的 MCP 协议鉴权流程章节。

OAuth 2.1 IETF草案(draft-ietf-oauth-v2-1-12)

OAuth协议在不暴露用户的用户名和密码的情况下,通过引入访问令牌,以安全、可控的方式允许某个应用访问用户的数据。

在OAuth 2.1授权机制下,OAuth定义了四种角色:

资源所有者:能够授予对受保护资源访问权限的实体。当资源所有者是个人时,被称为最终用户。缩写为“RO”。

资源服务器:托管受保护资源的服务器,能够使用访问令牌接受和响应受保护资源请求。资源服务器通常可以通过 API 访问。缩写为“RS”。

客户端:代表资源所有者并获得其授权的应用程序,用于发起受保护资源请求。

授权服务器:服务器在成功验证资源所有者身份并获得授权后向客户端发放访问令牌。缩写为“AS”。

其大致授权流程如下:

image.png

1、客户端向资源所有者请求授权。授权请求可以直接向资源所有者发起,或者通过授权服务器作为中介间接发起。

2、客户端接收授权许可——一种代表资源所有者授权的凭证,使用授权许可类型或扩展授权许可类型来表示。授权许可类型取决于客户端请求授权的方法以及授权服务器支持的类型。

3、客户端通过向授权服务器进行身份验证并提交授权许可来请求访问令牌。

4、授权服务器对客户端进行身份验证并验证授权许可,如果有效,则发放访问令牌。

5、客户端从资源服务器请求受保护的资源,并通过出示访问令牌进行身份验证。

6、资源服务器验证访问令牌,如果有效,则处理请求。

OAuth 2.0 Authorization Server Metadata(RFC8414)

Authorization Server Metadata协议,即ASM协议,解决OAuth 2.0客户端如何和OAuth 2.0的授权服务器交互的问题,包括:授权地址、获取token地址、支持哪些授权方式等。如果没有ASM协议,虽然可以约定授权服务器获取Token的地址、授权地址等信息,但是授权服务器支持的授权方式、支持的授权码类型却因为授权服务器实现的不同,会有所区别,无法静态配置。

其工作流程如下:
image.png

1、客户端通过GET请求访问授权服务器的/.well-known/oauth-authorization-server路径;

2、授权服务器返回授权服务器配置的声明,包括所有必要的端点和公钥位置信息。响应体示例(实际的ASM协议响应可包含更多的内容,见RFC8414):

HTTP/1.1 200 OK
Content-Type: application/json

{
  "issuer": "https://auth.example.com",
  "authorization_endpoint": "https://auth.example.com/oauth/authorize",
  "token_endpoint": "https://auth.example.com/oauth/token",
  "response_types_supported": ["code", "token"],
  "grant_types_supported": ["authorization_code", "client_credentials"]
}
AI 代码解读

OAuth 2.0 Dynamic Client Registration Protocol (RFC7591)

Dynamic Client Registration Protocol协议,解决OAuth客户端如何向授权服务器注册的问题。在没有DCRP协议时,OAuth客户端如果要向授权服务器进行注册,依赖人工配置,需要手动申请client_id和client_secret然后硬编码到OAuth客户端中,从而授权服务器可以正确识别一个OAuth客户端。

其大致授权过程如下:

image.png

1、客户端或开发者调用客户端注册端点,并附上客户端所需的注册元数据,如果授权服务器要求,则可选择包含初始访问令牌。

2、授权服务器注册客户端并返回:

客户端的注册元数据

client_id:在授权服务器上的唯一客户端标识

client_secret:客户端凭据,用于客户端证明自己的身份

OAuth 2.0 Protected Resource Metadata (RFC9728)

Protected Resource Metadata协议,通过在资源服务器上注册一个约定的获取元数据的端点,并在该端点返回关于该资源服务器的元数据配置,从而让客户端可以获取资源服务器支持的授权服务器、scope等信息,而无需在客户端中静态配置这些参数。

其工作流程如下:

image.png

1、客户端在没有提供访问令牌的情况下向受保护资源发起请求;

2、资源服务器响应中包含一个 WWW-Authenticate 头,其中包括受保护资源元数据的 URL;

3、客户端从此 URL 获取受保护资源的元数据;

4、服务器返回受保护的资源元数据;

5、客户端验证受保护的资源元数据,并根据RFC8414从资源元数据中的issuer标识构建授权服务器元数据 URL;

6、客户端请求获取授权服务器的元数据。

7、授权服务器根据RFC8414返回授权服务器元数据;

8、客户端配置用户代理请求授权服务器,开始用户授权流程;

9、授权完成后,授权服务器向客户端返回访问令牌等数据;

10、客户端通过访问令牌请求资源服务器;

11、资源服务器返回所请求资源。

MCP协议鉴权流程

MCP 2025-03-26

在该版本中,推荐基于HTTP(SSE, Streamable HTTP)传输的MCP Server实现规范描述的授权机制,该版本基于如下的协议规定了授权机制:

Authorization Server Metadata和Dynamic Client Registration Protocol标准,可以使得MCP Client在无需人工干预和预先配置的情况下,获取MCP Server的授权信息,并动态注册到MCP Server,因此协议推荐MCP Server和Client实现这些标准。

该版本的MCP授权步骤如下图所示:

image.png

1、MCP Client未携带访问令牌,访问MCP Server;

2、MCP Server拒绝访问请求,放回401 Unauthorized;

3、MCP Client根据Authorization Server Metadata协议的约定,访问MCP Server的元数据发现路径;

4、MCP Server将授权服务器元数据信息返回给MCP Client;

5、MCP Client根据Dynamic Client Registration Protocol的约定,访问MCP Server的注册端点;

6、MCP Server将客户端id和客户端凭据返回给MCP Client;

7、MCP Client为了防止中间人攻击,启动PKCE流程,生成code_verifier和code_challenge等信息;

8、MCP Client启动用户代理,携带code_challenge等信息将用户引导至授权页;

9、用户授权后,MCP Server会使用之前提供的重定向 URI(在请求中或客户端注册时提供)将用户代理重定向回MCP Client,重定向 URI 中包含授权码;

10、MCP Client通过包含上一步收到的授权码和其code_verifier,从MCP Server的令牌端点请求访问令牌。

11、MCP Server对客户端进行身份验证后,返回访问令牌和刷新令牌。

MCP最新Draft

在MCP 2025-03-26版本中,MCP Server被视为OAuth授权服务器,MCP Server开发者需要为每个MCP服务开发授权功能,导致开发MCP Server的成本较高而且MCP 服务开发者如果对授权不是特别了解的话,还容易引入安全问题。因此,在最新的Draft中,社区将MCP Server作为资源服务器,授权服务交给三方/现有的身份提供商/授权服务完成。

由于在最新MCP草案中,MCP Server只作为OAuth的资源服务器,因此,客户端如何发现授权服务器成为一个问题。草案通过引入Protected Resource Metadata协议,让资源服务器在客户端需要鉴权时,返回一个PRM文档,其中包含授权服务器的位置、授权的范围等信息,从而让MCP Client可以获得授权服务器的有关信息。

从而,最新的Draft相比MCP 2025-03-26版本,在授权机制上有如下的几个变化:

1、MCP Server作为资源服务器,授权功能由专门的授权服务器负责;

2、增加了OAuth 2.0 Protected Resource Metadata (RFC9728)的要求

其授权流程如下:
image.png

函数计算对MCP场景下Auth的支持

根据MCP Server是否包含授权实现,在函数计算上部署MCP Server可以分为三种方式:

一、MCP Server作为资源服务器和授权服务器,需要实现授权逻辑

二、MCP Server作为资源服务器,授权逻辑由三方服务实现

三、MCP Server作为资源服务器,授权由函数计算网关实现

由于前两种方式依赖MCP Server开发者自行实现,因此,在此处不再讨论,可以参考github上的公开实现。目前,函数计算网关还没有支持OAuth授权机制,在MCP集成场景下,我们提供了Bearer认证方式解决MCP 场景下的Auth问题。具体操作步骤如下:

1、登录阿里云控制台,跳转到函数计算3.0控制台后,选择创建函数,选择函数类型为“Web函数”,填写函数名称等参数后,选择函数运行时为MCP-Python-Python3.10,然后点击创建:

image.png

image.png

2、函数创建完成后,进入函数页面,在触发器配置上,选择默认的HTTP触发器,选择编辑后,修改触发器的认证方式为Bearer之后,配置选择默认,之后点击确认

image.png

其中tokenData部分就是用于客户端身份验证的Token数据,通过在Authorization Header中携带正确的Token数据,MCP Client就可以正确访问MCP Server

3、通过MCP Inspector验证MCP Server的功能:

image.png

在Transport Type中选择SSE,URL填入函数的触发器地址后,加上MCP SSE协议的/sse路径,在Authentication中,填写Header Name为Authorization,Bearer Token填写在函数触发器中配置的tokenData的值,点击Connect后,即可连接到MCP Server

image.png

连接成功后就可以查看MCP Server的Tool信息或者是调用Tool

image.png

如果配置的授权信息错误,则点击Connect会出现连接报错,此时需要检查配置的Authentication的Header Name和Bearer Token的值是否正确。

image.png

在Cursor等工具中使用部署在FC上开启Bearer认证的MCP服务时,如果工具不支持配置Bearer Token或者手动传递Authorization Header,可以通过社区的supergateway,将remote MCP Server暴露为本地的stdio,认证由supergateway负责,比如:

{
  "mcpServers": {
    "cursorExampleNpx": {
      "command": "npx",
      "args": [
        "-y",
        "supergateway",
        "--sse",
        "https://<替换为具体的函数地址>/sse",
        "--oauth2Bearer",
        "<替换为具体的Bearer Token数据>"
      ]
    }
  }
}
AI 代码解读

配置好后,就可以在Cursor中通过带认证信息的方式使用MCP Server了(注意要使用https协议,不要使用http协议)

image.png

通过函数计算网关进行权限认证,存在如下的优势:
1、节约MCP Server的开发成本,开发者专注自己的MCP服务的逻辑;
2、访问因为鉴权失败时,不会产生额外的费用,可以防止无效的调用请求。

总结

从MCP最早的2024-11-05版本不支持授权,到2025-03-26版本对OAuth 2.1的支持,再到最新Draft中对OAuth授权机制的进一步改进,MCP协议的安全性在不断完善,但是MCP Server支持Auth的开发成本、SDK对MCP Auth的跟进有滞后都使得开发者在安全的暴露自己的MCP服务上面临挑战。目前,在 MCP集成场景下,函数计算提供了 Bearer 认证方式解决 MCP 场景下的 Auth 问题。暂还没有支持OAuth 授权机制,我们会关注社区 OAuth 的进展。当然, 如果您有其他 restful API-KEY 的场景, 也可以使用函数计算提供的 Bearer 认证,Bearer认证支持 HTTP 触发器,并即将支持自定义域名。

参考

1.MCP Specification
2.supergateway
3.https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-12
4.https://datatracker.ietf.org/doc/html/rfc8414
5.https://datatracker.ietf.org/doc/html/rfc7591
6.https://datatracker.ietf.org/doc/html/rfc9728

目录
打赏
0
3
3
0
97
分享
相关文章
MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕
本文深入探讨了分布式架构中请求亲和性技术在Serverless范式下的实践。文章以MCP Server在函数计算平台的集成为例,剖析了基于SSE长连接通信模型的会话亲和、优雅升级等关键技术。通过双阶段协商机制与网关层协同设计,函数计算实现了MCP SSE会话亲和性保障,解决了无状态服务处理有状态请求的难题。同时,文章还展示了压测结果,验证了系统的稳定性和扩展能力,并总结了Serverless与有状态服务融合的技术创新点。
MCP 协议: Streamable HTTP 是最佳选择
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
1719 98
MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配
本文深入解析了Model Context Protocol(MCP)协议,探讨其在AI领域的应用与技术挑战。MCP作为AI协作的“USB-C接口”,通过标准化数据交互解决大模型潜力释放的关键瓶颈。文章详细分析了MCP的生命周期、传输方式(STDIO与SSE),并提出针对SSE协议不足的优化方案——MCP Proxy,实现从STDIO到SSE的无缝转换。同时,函数计算平台被推荐为MCP Server的理想运行时,因其具备自动弹性扩缩容、高安全性和按需计费等优势。最后,展望了MCP技术演进方向及对AI基础设施普及的推动作用,强调函数计算助力MCP大规模落地,加速行业创新。
1146 77
从零开始开发 MCP Server
文章介绍了如何利用Serverless Devs CLI工具从零开发并一键部署MCP Server至阿里云函数计算(FC)。涵盖MCP协议背景、Serverless Devs工具简介、本地初始化与开发MCP Server步骤、通过SSE协议部署及测试MCP Server方法,以及三种客户端接入方式。读者可快速上手构建支持LLM扩展交互能力的智能体服务,并使用内置LLM的Inspector进行调试。文末还提供了更多资源和交流渠道。
1131 64
从零开始开发 MCP Server
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
kde
|
10天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
6486 15
MCP Server 之旅第 2 站: 从 0 到 1 - MCP Server 市场构建与存量 OpenAPI 转 MCP Server
本文聚焦MCP协议在企业应用中的两大核心痛点:如何将社区主流STDIO MCP Server一键转为可插拔Remote MCP Server,以及如何实现存量OpenAPI向MCP Server的智能化转型。文章通过具体示例,展示了基于函数计算和协议转译Adapter的解决方案,支持npm/pip生态,实现零改造一键迁移,大幅降低成本。
什么是阿里云无影云手机?看完秒懂,云手机价格、创建及连接教程
阿里云无影云手机是一种基于云端的虚拟手机服务,适用于仿真测试、云游戏、数字人直播等场景。它提供轻量型、通用型、标准型和性能型四种规格,支持包年包月与按量付费模式,价格从65元/月起。使用时需创建实例组,选择地域、规格、镜像等配置,并完成支付。应用可通过控制台安装,连接方式包括管理控制台、无影客户端及ADB工具。详尽教程助您快速上手无影云手机。
394 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问