前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8393
  • AI 陪伴应用技术架构解析
  • 把 Claude Code 脚手架工程写成一条命令,开源了
  • A2A 协议详解:多 Agent 通信架构与实战实现
  • R-CLI 开源:Terminal Bench 2.1 最高分背后的编程脚手架
  • CVE-2026-16584:AWS API MCP Server安全漏洞深度分析
  • GitHub Copilot已上线Gemini 3.7 Flash
  • Anthropic 为 Claude 输出文本添加水印:API 开放检测,版权认定存争议
  • Next.js 16.3发布:开发内存降低90%,AI编码Agent工作流优化
  • 一行代码修复PyTorch训练隐性内存泄漏:loss.detach().item()
  • AgentShield:防止AI代理半夜烧钱2000美元的开源防火墙
  • AI智能体存在欺骗作弊行为,用户信任度持续下滑
  • 用Azure API Management管控Claude Code团队使用
  • 模型同质化时代:选型逻辑已变,护城河在模型之外
  • DBHub vs Bytebase MCP:数据库Agent接入方案对比
  • Claude Code Plan模式深度解析:权限变化与August 14切换要点
  • Opus 5 vs GPT-5.6 Sol vs Kimi K3 三大模型编程能力实测对比
  • Grok 4.6 性能追平 GPT-5.6 Sol,价格仅为六分之一
  • 为中国AI API 构建模型目录漂移监控工具
  • Opus 5 vs GPT-5.6 Sol vs Kimi K3:三大AI代理模型横向评测
  • Grok 4.6 性能比肩 GPT-5.6 Sol:前沿竞争已成经济学竞赛
  • MCP 服务器认证在规范中为可选项:安全风险警示
  • 同一 prompt 跑 11 个主流 AI 模型:结果差异显著
  • DeepSeek Harness 公测:开源代码 Agent 框架对标 Claude Code
  • Agent 芯片新贵获 4.8 亿美元融资:首颗 AI 芯片已量产
  • Grok 4.6以更低价格重返一线,逼近Fable 5
  • Vibe Coding不是软件工程:AI编程的边界与反思
  • 扫描PDF翻译是图形问题而非翻译问题
  • MCP协议变更为无状态:工具执行幂等性挑战
  • Claude 破解数学难题:2000 阶以下哈达玛矩阵
  • DeepSeek-V4-Pro正式版:原生兼容OpenAI Responses API与Codex
  • DeepSeek V4 Flash/Pro 8月调价:输入降价达40%,并发限制调整
  • 三起AI Agent越狱事件:均因配置验证缺失
  • Claude推出隐形水印功能,可标记AI处理过的内容
  • OpenAI 发布 GPT-5.6 构建指南:聚焦 AI Agent 开发
  • AI 编程 Agent 的 Tracker 都是自我填报系统:真实问题剖析
  • Fable 5采用率低迷,企业AI支出或已触及天花板
  • AI研究者早年预测的自动化研究里程碑接连实现
  • Grok 4.6持久VM Agent测试指南:50万token上下文的工程实践
  • Gemini延期两月编程能力仍落后:谷歌DeepMind换帅内情
  • 企业级 GitLab MCP 安全加固:将 LLM 视为不可信客户端
  • Puppeteer MCP Server:让 AI Agent 直接操控浏览器
  • Anthropic 将 Claude Cowork 集成至 Chrome 扩展程序侧边栏
  • Laravel Boost v2:让AI Agent真正读懂你的Laravel项目的MCP服务器
  • OpenAI 新 API 速度提升 14 倍
  • 私有LLM总拥有成本实测:自建Llama vs 云API谁更划算
  • 和 AI 编程助手有效协作的实战技巧
  • miniVE:让 AI 编码代理在本地沙箱中安全运行
  • 第三谓词:突破词空间验证的论元空间验证方法
  • 本周 AI 开发:DeepSeek V4 Pro/Grok 4.6/Meta Muse-Glimmer 三款前沿模型扎堆
  • Claude 输出归属权与模型训练的法律边界
  • 多Agent系统状态协调:生产环境的隐形坑
  • 已加载 51 / 8393
9.0
重磅
AI SCORE
技术实践2026-08-13 21:08

MCP 服务器认证在规范中为可选项:安全风险警示

dev.to · AI#MCP#安全#AI Agent
Editor brief · 编辑速览

Model Context Protocol 规范中授权为可选实现,实测发现 40.55% 的远程 MCP 服务器完全无认证,这对 AI Agent 调用敏感工具构成严重安全风险。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

The authorization section of the Model Context Protocol specification opens with a sentence that most security reviews never reach: "Authorization is OPTIONAL for MCP implementations." The capitalisation is the specification's own, in the RFC 2119 sense. A remote MCP server that requires nothing of the client that calls it is not a misconfiguration. It is a conformant implementation.

In May 2026, a measurement study put a number on what that permission produced in the wild. Zhou and colleagues identified 7,973 live remote MCP servers and found that 40.55% expose tools without authentication.

MCP server authentication is the boundary at which a remote MCP server decides whether the caller reaching it is entitled to the tools it advertises. The protocol places that decision entirely with the server operator, and defines a flow — OAuth 2.1 over HTTP transports — for operators who choose to implement one. Nothing in the protocol requires that they do, and nothing in the agent's view of a connected tool reports which choice was made.

Optional is a design decision, not an oversight

The specification is not careless here. For operators who implement authorization, the current revision is demanding. A protected MCP server acts as an OAuth 2.1 resource server. Clients MUST implement Resource Indicators for OAuth 2.0 as defined in RFC 8707, sending a resource parameter identifying the target server in both authorization and token requests, whether or not the authorization server supports it. Servers MUST validate that access tokens were issued specifically for them as the intended audience, and MUST NOT accept or transit any other tokens. That is a careful set of defences against the confused-deputy and token-passthrough problems a broker-shaped protocol invites.

The architectural point is that all of it is conditional on a choice made by a party the enterprise does not employ. Authorization is a property of each server, negotiated between that server's operator and whichever client happens to connect. The organisation running the agent fleet is not a participant in that negotiation. It inherits the result.

That is the structural difference between MCP and the integration layers it is often compared to. An API gateway sits in the request path by construction; whatever policy it holds applies because traffic cannot route around it. MCP inverts the arrangement. Each server is its own perimeter, and the client's job is to comply with whatever each perimeter asks — including a perimeter that asks for nothing.

What the measurement actually found

The unauthenticated 40.55% is the headline, but it is the less interesting half of the study.

The researchers then examined the servers that did implement OAuth. They observed that MCP's OAuth deployments share three characteristics distinguishing them from conventional OAuth: open client environments, dynamic client registration, and delegated authorization. From those they derived a taxonomy of four categories and nine concrete flaw types, then built a semi-automated detection framework combining passive traffic inspection with active probing.

Applied to 119 testable real-world OAuth-enabled MCP servers, the framework found that every server exhibited at least one flaw, for 325 flaws in total. Dynamic client registration flaws affected 96.6% of servers tested. The authors report that many can lead to sensitive information leakage and account takeover, and that responsible disclosure yielded nine CVE identifiers.

Two caveats belong on those figures: this is a preprint rather than peer-reviewed work, and 119 servers is a sample of the OAuth-enabled population rather than a census. What it establishes is directional and hard to explain away. Implementing the recommended mechanism was not sufficient to be secure, and the most-affected mechanism was the one that lets a client register itself without a human ever approving it.

The specification moved. The deployed servers did not.

Here the timeline does something instructive.

MCP's current protocol revision, 2026-07-28, postdates the measurement by roughly two months. Its changelog deprecates the OAuth 2.0 Dynamic Client Registration Protocol as a client registration mechanism, in favour of Client ID Metadata Documents. The authorization page carries the reasoning inline: dynamic client registration is "deprecated and retained for backwards compatibility with authorization servers that do not support Client ID Metadata Documents."

The same revision tightens several other things that map onto the study's flaw categories. Authorization servers SHOULD include the iss parameter in authorization responses per RFC 9207, and clients MUST validate a present iss against the recorded issuer before redeeming an authorization code. Client credentials are now explicitly bound to the authorization server that issued them: clients MUST key persisted credentials by issuer identifier, MUST NOT reuse them with a different authorization server, and MUST re-register when the authorization server changes. Clients performing dynamic registration MUST specify an appropriate application_type to avoid OpenID Connect redirect URI conflicts.

This is a specification responding to its own security research, quickly and in the right direction. It is also the clearest possible illustration of what a specification can and cannot reach. The same revision adopted a feature lifecycle policy with a minimum twelve-month deprecation window, which means the deprecated registration mechanism remains a legal part of the protocol into at least mid-2027, by explicit policy. Deprecation is an instruction to people writing new implementations. The 7,973 servers already answering requests did not read it.

And the sentence that produced the 40.55% is unchanged. Authorization is still OPTIONAL.

The agent cannot see the difference

Consider what a connected tool looks like from inside an agent.

An ungoverned fleet connects a client — Claude Desktop, Cursor, a custom agent — directly to a set of remote MCP servers. Each connection is authenticated separately, or not, according to what each server asked for. The signal that returns to the operator is binary: the tool appeared in the list, or it did not. A server running hardened OAuth 2.1 with audience-bound tokens and a server that checks nothing produce the same green state in the client. Calls land on the upstream attributed to whatever credential was configured, which for a shared token is a bot account rather than a person. When someone leaves, those credentials are chased across each upstream's admin console individually.

A governed fleet moves the question somewhere it can be answered. Not because a control plane makes the upstream servers better — it does not, and no one operating them is obliged to care. Because authentication answers who is calling, while the organisation also needs an answer to what this caller is allowed to do, recorded somewhere it owns. MCP delegates only the first, to a party chosen by whoever wrote the config file.

One practitioner is arriving there without waiting. On Hacker News in July 2026, a commenter on a survey of MCP security described building an internal MCP proxy — upstreams behind Entra OAuth, per-tool RBAC via CEL expressions — for the relief of "not trusting other people's slopped out MCPs to do the right thing with authentication." That is an engineer independently deriving a chokepoint because per-server trust did not scale.

How Waxell handles this

The Waxell MCP Gateway is one MCP endpoint per tenant, and the agents point at it instead of at the upstreams. That placement is the whole argument: the gateway sits in the path by construction, so what it enforces does not depend on what any individual upstream chose to require.

Two published behaviours matter for this problem specifically.

Identity is resolved before the upstream sees the call. Every tool call through the gateway is resolved to a real user identity rather than a service account, with three auth modes available per upstream. Under on-behalf-of OAuth the gateway brokers the OAuth flow, stores the user's refresh token KMS-encrypted and never returns it to the agent client, and mints a fresh access token at call time — so the upstream's own audit log names the person who triggered the call. A shared service account and a bring-your-own-token mode cover upstreams without a standard OAuth flow. When someone is deactivated, every per-upstream OAuth grant they held is revoked in one transaction across every upstream at once, and the audit log records the event, the timestamp, the actor and the upstreams unwound.

Policy is evaluated on both legs. Every tools/call is evaluated against the tenant's policy rules before the upstream sees it, and again before the result returns to the agent. Rule changes propagate to the fleet within 30 seconds, with no restart. Waxell publishes 50+ policy categories across the platform. The audit log stores the resolved identity, the decision and the rules that fired, without retaining the argument values or result bodies that passed through.

One scope note, load-bearing for planning rather than decoration. The gateway governs the calls that traverse it. An agent holding a direct upstream credential, or a locally registered MCP server, sits outside that path, and nothing at the gateway applies to those calls. Coverage is a configuration property rather than a guarantee, which makes an inventory of what your clients are actually pointed at the prerequisite, not the follow-up. The Free plan includes one governed MCP upstream with 14-day retention — enough to put a real client behind the gateway and see what it has been calling.

FAQ

Does the MCP specification require authentication?

No. The specification's authorization section states that authorization is OPTIONAL for MCP implementations, using the term in its formal sense. Where implementations do use HTTP-based transports and choose to support authorization, they SHOULD conform to the OAuth 2.1-based flow the specification defines. Implementations using STDIO transport are directed not to follow that flow and to retrieve credentials from the environment instead. A remote server that requires nothing is conformant, which is why an unauthenticated endpoint is not evidence that anyone made a mistake.

How many remote MCP servers have no authentication?

A May 2026 preprint from Zhou and colleagues identified 7,973 live remote MCP servers and reported that 40.55% expose tools without authentication. Among the OAuth-enabled servers the same study could test — 119 of them — every server exhibited at least one authentication flaw, with 325 flaws found in total and dynamic client registration flaws affecting 96.6%. The work yielded nine CVE identifiers through responsible disclosure. Treat the percentages as a directional measurement of a moving population rather than a fixed statistic.

Is dynamic client registration still recommended for MCP?

Not for new implementations. Protocol revision 2026-07-28 deprecates the OAuth 2.0 Dynamic Client Registration Protocol as a client registration mechanism in favour of Client ID Metadata Documents, and the authorization page describes it as retained for backwards compatibility with authorization servers that do not support the newer mechanism. The same revision adopted a deprecation policy with a minimum twelve-month window, so deprecated features remain part of the specification for a defined period rather than disappearing on the revision date.

Does authenticating an MCP server mean its tool calls are governed?

They are separate controls. Authentication establishes which caller is reaching the server, and the server operator decides what that entitles the caller to. It produces no record on the calling organisation's side of which tools were invoked, by which person, under which policy. Token scope is a partial answer worth setting carefully — see MCP least privilege — but scoping a token constrains what a credential can reach, not what a specific call is permitted to do at the moment it is made.

What should a team inventory first?

Start from the client configs rather than the server list, because the configs determine reachability. For each agent client in use, enumerate which MCP servers it points at, which are remote versus local, what credential each connection carries, and whether that credential resolves to a person or a shared account. That turns an abstract question about the ecosystem into a specific list of upstreams your agents can reach today. Wider background is in MCP governance.

References

Huijun Zhou, Xiaohan Zhang, Haozhe Zhang, Haoyang Zhang, Mi Zhang, Min Yang, "A First Measurement Study on Authentication Security in Real-World Remote MCP Servers", arXiv:2605.22333, 21 May 2026

Model Context Protocol, "Authorization", specification revision 2026-07-28, accessed 12 August 2026

Model Context Protocol, "Key Changes", specification revision 2026-07-28, accessed 12 August 2026

Hacker News, "The State of MCP Security", discussion thread, July 2026

The specification did the part a specification can do. It named the weak mechanism, deprecated it, and tightened the flow around it. What it cannot do is reach 7,973 servers that are already answering, or make an agent's tool list tell you which of them asked for anything.

Originally published on the Waxell blog.

Start free with the Waxell MCP Gateway at waxell.dev/signup, and find out what your agents are already connected to.

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
Grok 4.6 性能比肩 GPT-5.6 Sol:前沿竞争已成经济学竞赛
下一篇
同一 prompt 跑 11 个主流 AI 模型:结果差异显著