2026-07-31T17:58:08.366Z

如何进行MCP认证? 审计OAuth链

追踪远程MCP OAuth路径从第401号到资源,发行人,PKCE,范围,代币和准备收据.

对于受保护的远程MCP服务器, 认证不是一个代币检查. 它是一个授权链:客户端接收了一个挑战,发现了对准确保护资源的元数据,发现和验证了授权服务器,获得了客户端身份,运行了PKCE和资源指标的授权代码流程,接收了所需的范围,并证明了结果的代币在预期的MCP终端点工作. 这种答案有重要界限. 目前的经过MCP授权的规范使授权是可选的,并将其OAuth路径应用于基于HTTP的运输. 局部STDIO服务器应该通过其主机环境或其他局部机制获取凭证. 因此,启动每个MCP连接的浏览器流不是一个合理的默认. 运行问题不是我有代币吗? 是哪些收据显示该特定授权链中的每个绑定都同意? 代币形状的字符串可以与错误的资源,一个不值得信赖的发行商,缺失范围或仍然返回 401 的受保护请求共存. 首先是运输,然后是第一次挑战. 官方的授权MCP教程解释了远程HTTP流程的阶段. 缩写形式: 1. 客户在没有代币的情况下发送MCP请求. 2. 保护的MCP服务器返回 401 Unauthorized 带有 Bearer WWW Authenticate 挑战. 3. 挑战通过 resource metadata 指向受保护资源的元数据. 4. 该元数据识别了受保护的资源和一个或多个授权服务器. 5. 客户端获取授权服务器的元数据,并验证发行者和终端点. 6. 客户端通过授权服务器支持的机制获取客户端ID,然后运行授权代码流程,使用PKCE和MCP资源识别器. 7. 客户端将获得的访问令牌发送到MCP服务器,并观察受保护的请求. 第一个 401 并不是压制失败. 这是一份发现收据. 一个有用的记录保存HTTP状态,身份验证方案,元数据URL,观察时间和选定的MCP资源. 它确实是 没有 保持 Authorization 标题,Cookies,授权代码,验证器,客户端密码或访问代币. 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签: 标签:定义了受保护资源的元数据和已知发现模式. 其安全值取决于权威: https://mcp.example/mcp 的元数据必须描述该资源,而不是类似的主机或由无关服务提供的URL. 随着任意授权 URL 来自错误体并非相当. 授权服务器是一个独立的角色. 保护MCP服务器作为OAuth资源服务器;MCP客户端作为OAuth客户端;授权服务器在需要时与用户交互并发行访问令牌. 混合这些角色使得一个常见的故障解决错误看起来是可行的:在检查客户是否发现正确的发行商之前旋转资源服务器代币. 结合资源,发行商,客户端和代码流 两个URL值得一个准确的比较. 第一个是保护资源. 标准标准 8707定义了 resource 请求参数,以便授权服务器知道预期的代币接收者. 目前的MCP草案要求授权和代币请求中的资源参数. 为另一个API发行的访问令牌对选择的MCP服务器几乎不有效. 第二个是授权服务器发行商. 在打开浏览器之前,客户端从验证的授权服务器元数据中记录发行者. 当授权响应包括 iss 时,当前的MCP草案描述了客户端向代码终端点发送之前与记录的值进行比较. 发行者不匹配是停止条件,而不是试用相同代码对两个终端点的理由. 客户注册也是一个明确的层次. 客户端可以使用客户端ID元数据文档,预注册客户端ID或支持动态注册路径. 目前的草案将动态客户登记视为一种兼容性机制,而不是一个普遍的假设. 如果没有支持的注册机制,正确的判决是 registration blocked ;发明转向URI或重复使用其他产品客户端ID将隐藏实际互操作性故障. PKCE将授权请求绑定到后来的代码交换. 审计只记录流量是否保留了绑定验证器,而不是验证器本身. 如果浏览器返回代码,则缺失的绑定将成为 unsafe flow . 以下是用于一个健康器件的无含量形状: 域名是配置证据,而不是秘密值. 在敏感部署中,它们仍然可以揭示能力,因此只保留卫生决定所需的内容,并使用与其他操作元数据相同的访问控制. 诊断第一个失败层 单一的检查清单会产生相互矛盾的行为. 如果没有保护资源的元数据,则发行者比较没有可靠的输入. 如果资源识别符是错误的,要求更广泛的范围不会修复它. 因此,分类器使用优先级,在第一个失败层停止: 判决 证据阻止了链接 限制下一步行动 not applicable 地方STDIO运输 使用运行时间的本地凭证机制 invalid challenge 缺失或非HTTPS resource metadata 修复 401 挑战 metadata unavailable 保护资源的元数据没有返回 200 恢复元数据;不要猜出发行者 resource mismatch 转换数据或代币目标为不同的资源 正确资源身份或请求资源绑定代币 issuer mismatch 发现或回调发行人不同意 拒绝流量和检查元数据权威 registration blocked 没有支持的客户身份 配置支持的注册机制 unsafe flow 授权代码流缺乏PKCE绑定 使用PKCE重新启动 step up required 目前的操作需要未经批准的范围 要求仅 challenged missing scope token rejected 约束一致,但受保护的请求仍然失败 在转换之前,分类新挑战 authorized ready 所有授权收据都同意,请求成功 继续进行MCP初始化和结果检查 提供的装置可以在没有网络访问的情况下重播: 它的历史表现出了十个案件,十个第一层判决, authorized ready 并且 secretFieldsStored: 0 . 这种结果是故意比9个错误和1个成功更严格的. 它证明了决策规则保留了本地运输,失败的发现,矛盾的身份,不支持的注册,不安全的代码流动,缺失范围和拒绝的代币之间的有意义的差异. 首层失败规则也限制了重试. metadata unavailable 可以证明重新尝试有限的元数据是合理的. issuer mismatch 不应该这样做. 对于受质疑范围, step up required 可能会证明新的同意流程是合理的. 由于到期期,撤销,受众和范围不共享一项修复,因此 token rejected 需要阅读新挑战. 保持扩展范围与代币失败分开 目前的MCP草案建议服务器在其 WWW Authenticate 挑战中包括所需范围. 目前操作所挑战的范围是该操作的权威性;它不需要等于资源元数据的整个 scopes supported 集合. 这改变了运营商的决定. 假设一个读取成功的 files:read ,然后写回来 403 和挑战 files:write . 这并不是证据表明代币商店是腐败的. 这是一个 step up required 状态. 客户应在人为可见的情况下要求缺失许可,并保留其他操作所需的许可. 相比之下,在资源,发行者,注册,PKCE和范围收据同意后,返回 401 的受保护请求是 token rejected . 接下来的安全步骤是分类新的挑战. 重复呈现同样的符号是活动,而不是进步. 每个凭证的转换也可以摧毁有用的证据, 关于 authorized ready 的判决仍然很狭窄. 它说远程MCP服务器接受了这个请求的授权链. 它没有说: 启动MCP和能力谈判成功; 选择的工具仍然存在,或其方案没有变化; 一个工具调用产生了预期的外部效应; 一种副作用在休息后可以再次尝试; 使用者可交付的存在; 授权服务器,客户端和资源是全球可信的. 这些是后续的健康和安全决定. 成功的受保护请求应将运行转移到MCP生命周期检查,然后进行工具效果和结果验证而不是直接转移到 代理健康. 没有收集证书使用收据 在生产操作中,只需要将选定的客户端和资源的哈希或稳定ID存储,以便对事件进行相关性. 记录时间标签和规范版本,因为元数据和协议规则不断演变. 保存原始代币,代码,验证器,秘密,cookie,提示,工具参数和工具结果. 艺术品是一个分类器,而不是一个现场合规套件. 它相信所提供的观察. 实际实现必须进一步验证TLS,元数据来源,转向URI,发行商行为,代币签名或内视,观众,过期和部署政策. 2026年7月30日检查了MCP草案. 按你执行的规格,并在合同发生变化时重新启动. Sidewisp的产品领域包括工具可访问性,过期的凭证,权限丢失,有用的进展和结果验证. Sidewisp 目前处于私密预览阶段。 它的生产监测适配器和恢复执行器通常不出货,因此本文提供了一个独立的操作规则,而不是声称Sidewisp已经执行了MCP授权审计. 因此,实际答案为"MCP身份验证如何工作?"是连锁授权收据,而不是持有符号的截图. 将第一种矛盾视为诊断,应用一个有限的修复,并将授权成功与工具成功和用户的最终结果分开.