技术笔记

MCP 工具网关:身份、范围与请求校验

发现一个工具并不意味着当前用户有权执行它。

2026年5月20日阅读约 2 分钟
MCP鉴权工具

协议连接不是授权

发现一个工具并不意味着当前用户有权执行它。MCP 连接层和业务服务仍需分别验证身份、资源归属与操作范围。用户 ID 应来自服务端会话,不能使用模型提供的 userId 覆盖会话身份。

工具返回的数据也可能包含恶意指令。将工具结果交给模型时,应保留来源并标记为数据;实际写操作仍由程序校验。提示词可以指导模型,但不能代替数据库的所有权条件。

可运行的业务授权示例

import assert from "node:assert/strict";
function authorize(session, resource, operation) {
  if (!session || !session.scopes.includes(operation)) return false;
  return resource.ownerId === session.userId;
}
const user={userId:"alice",scopes:["notes:read"]};
assert.equal(authorize(user,{ownerId:"alice"},"notes:read"),true);
assert.equal(authorize(user,{ownerId:"bob"},"notes:read"),false);
assert.equal(authorize(user,{ownerId:"alice"},"notes:write"),false);

请求生命周期

接收请求后先校验结构与大小,再确认会话权限,再查资源归属,最后执行动作。写入需要幂等键与事务;失败不能返回成功。对外部 URL 访问,应另设目的地范围和重定向校验,避免将网关变成任意地址代理。

审计记录可以保存工具名称、结果状态和追踪 ID,不应默认保存密码、访问令牌或完整私人正文。OAuth 场景中需要核对令牌受众和权限范围,不应将收到的令牌未经验证地透传给其他服务。

原始资料

感谢阅读本文

如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。

579 次阅读65 人赞过