新闻详情

新闻详情

首页 / 资讯中心 / 详情

MCP实战手记系列(四):CIMD 授权实战,把 client_id 换成 HTTPS URL(文末附github源码链接)

发布时间:2026/10/1 10:25:25来源:尧图网络
MCP实战手记系列(四):CIMD 授权实战,把 client_id 换成 HTTPS URL(文末附github源码链接)
MCP 实战手记系列四· 代码实操系列一讲了 DCR 被弃用、CIMD 上位当时留了钩子client_id 到底长什么样、自己搭要几行代码。这篇来兑现。重实操代码我亲手跑过。引子一个容易被忽略的授权点系列三迁移时发现 MCP 端点裸奔、凭证硬编码。再往深想MCP 里客户端是谁没说清。DCR 那套动态注册坑比用的人多。一、DCR 到底烂在哪每连一次就注册一个新 client_id数据库越涨越大客户端过期了服务器不知道僵尸 ID 一堆同一应用换个设备又是一个 ID未认证的注册端点本身就是 DoS 靶子CIMD 一句话清掉别注册了client_id 直接是 HTTPS URL。二、CIMD 原理授权时服务器去 GET 这个 URL 拿回元数据client_name、redirect_uris按需获取、可缓存。一个应用一个 URL换设备换用户不产生多个 ID也无注册端点被滥用。它只解决操作问题不解决冒充恶意客户端伪造回调冒充合法应用CIMD 拦不住文末说。三、元数据文档长什么样{client_id:https://app.example.com/.well-known/mcp-client,client_name:机房监控助手,redirect_uris:[https://app.example.com/callback],token_endpoint_auth_method:none,scope:mcp:read}注意client_id即文档自身 URL。四、动手最小可用 4 步代码在com.ethanliang.mcp.cimd仓库 tagv04。步骤 1客户端把元数据挂到 URL 上一个 Controller 返回 JSONclient_id 即本端点地址RestControllerclassClientMetadataController{GetMapping(/.well-known/mcp-client)ClientMetadatametadata(){returnnewClientMetadata(http://localhost:8084/.well-known/mcp-client,机房监控助手,List.of(http://localhost:8084/callback),none,mcp:read);}}本地 demo 用http://localhost:8084才能跑通生产换 https 域名并打开cimd.require-https。步骤 2服务端加拦截器读 client_idMCP 规范建议把客户端身份放进请求头如Mcp-Client-Id网关据路由与鉴权头名以 SDK 为准这篇统一用它publicbooleanpreHandle(req,res,chain){StringclientIdreq.getHeader(Mcp-Client-Id);if(clientIdnull){res.setStatus(401);returnfalse;}ClientMetadatametafetchMetadata(clientId);// GET 那个 URL带 5 分钟缓存if(!validate(meta,clientId)){res.setStatus(401);returnfalse;}req.setAttribute(clientName,meta.clientName());returntrue;}步骤 3校验先卡协议和主机白名单再查元数据字段白名单是防 SSRF 第一关——只 GET 认可的 hostbooleanvalidate(ClientMetadatam,StringclientId){if(requireHttps!clientId.startsWith(https://))returnfalse;// 生产强制 httpsif(m.redirectUris()null||m.redirectUris().isEmpty())returnfalse;if(m.clientName()null||m.clientName().isBlank())returnfalse;returnallowedHosts.contains(hostOf(clientId));// 白名单防 SSRF 第一关}步骤 4信任校验过的clientName放进请求属性业务直接取不再碰 client_id 本身。五、怎么验证真的没注册端点带正确Mcp-Client-Id发请求返回 200日志打印clientName机房监控助手client_id 指向不存在的 URL返回 401元数据缺redirect_uris返回 401六、踩坑记录实跑踩坑报错原文保留① RestTemplate 没默认超时恶意或慢 URL 拖满 Tomcat 线程。解法RestTemplate设 connect/read 超时或换 WebClient 带timeout()。② 本地用自签 HTTPSGET 元数据报证书错。解法demo 关校验生产必须可信证书。③ client_id 是 URL 不是密码别拿它当 token 校验CIMD 不防冒充需配平台级应用签名。④ 必须缓存元数据每次请求都 GET延迟高还容易把元数据服务打挂。解法用 Caffeine 按 client_id 缓存 5 分钟仓库已落地见ClientIdMetadataInterceptor。⑤ 客户端能指定任意 URL 让你 GET典型 SSRF打169.254.169.254云元数据、打内网 admin。解法host 白名单是第一道关只 GET 认可的 host生产再把requireHttps打开、并拒绝私有/链路本地地址。这一步不能省。七、CIMD 没解决什么它只去掉注册端点运维负担。身份冒充靠平台级应用证明macOS / Windows 签名加软件声明客户端后端签 JWT。demo 里服务端顺手托管了客户端元数据真实环境由客户端自托管服务器只按白名单 GET 并校验这是把鉴权简化成「每请求拉元数据」的示意生产放到授权服务器、只在 token 签发时取一次。小结client_id 变 URL注册端点消失DCR 坑一次性清掉代码很少一个 Controller 加一个拦截器半天能跑安全边界要认清CIMD 管登记不管冒充生产接 EMA完整可运行代码Gitee 仓库 GitHub 镜像tag:v04目录04-cimd-auth。MCP 实战手记系列路线图#篇目状态1总纲篇MCP 到哪一步了✅2跑通第一个 MCP Server✅3把 MCP Server 改成无状态✅4CIMD 授权实战本篇✅5MCP Apps让工具返回能点能填的界面规划6自建 MCP 网关一个端点聚合所有工具规划7安全篇端点鉴权、凭证管理与接入检查清单规划关注我更新第一时间看到。你在 MCP 授权上踩过什么坑评论区见有价值的我整理进后续篇目。参考客户端注册演进从 DCR 到 CIMDMCP 2026-07-28 规范更新
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Spring Boot的自习室预订座位管理系统:从规则设计到并发实践 2026/10/1 11:10:24

基于Spring Boot的自习室预订座位管理系统:从规则设计到并发实践

1. 为什么这类系统总在“预选座”和“实际履约”之间翻车先说个我亲眼见过的场景:学校考研自习室,两百多个座位,每天早上六点半开门,五点半就有人在门口排队。有人为了占座,把复习资料往桌上一堆,一整天人都…

阅读更多 →
Node-RED低代码可视化:零Node.js基础构建工业数据看板 2026/10/1 11:10:10

Node-RED低代码可视化:零Node.js基础构建工业数据看板

1. 这不是写代码,是搭积木:为什么“拖拽可视化”能绕过Node.js门槛 “即使不会node.js,拖拽就可完成数据的可视化展示”——这句话乍看像营销话术,但背后是一套真实存在的、已被工业现场和中小团队验证数年的低代码可视化路径。它…

阅读更多 →
CIOE2026展台交换机选型与配置实操:从光模块到AI集群的现场验证 2026/10/1 11:10:09

CIOE2026展台交换机选型与配置实操:从光模块到AI集群的现场验证

CIOE2026的展台上要摆一台交换机,这在三年前几乎是不可想象的事。光通信展区的主角向来是光模块、硅光芯片、相干DSP,交换机最多在角落当个背景板。但这几年风向变了,AI集群、数据中心互联、CPO光电共封装全都要靠交换机来验证价值——谁家的…

阅读更多 →
银河麒麟V10 SSH安装配置与故障排查实战 2026/10/1 11:10:02

银河麒麟V10 SSH安装配置与故障排查实战

1. 银河麒麟 V10 上的一套 SSH 究竟由哪些东西组成很多人第一次接触银河麒麟 V10 的远程运维,脑子里只有一句"要用 SSH 连上去",但真到机器上敲命令的时候才发现,SSH 其实不是"一个软件",而是一组工具的集合。…

阅读更多 →
链表中间结点查找:快慢指针原理与代码实现全解析 2026/10/1 11:09:56

链表中间结点查找:快慢指针原理与代码实现全解析

链表相关的算法题里,找到链表的中间结点绝对是一道绕不开的入门题。不管你是刚开始刷 LeetCode、准备数据结构期末考试,还是面试前临时抱佛脚,这道题出现的频率都高得吓人。它的经典解法快慢指针,更是后续许多链表高级技巧的基石。…

阅读更多 →
安卓APK反编译与Smali修改实战指南 2026/10/1 11:09:56

安卓APK反编译与Smali修改实战指南

1. 这不是“破解”,而是安卓应用的深度理解入口你手头有个APK,想改掉启动页的广告、删掉某个没用的功能按钮、把深色主题换成自己设计的渐变紫,甚至想看看某款工具类App的算法逻辑——但打开Android Studio新建项目重写?成本太高&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉