浏览 AI 知识库
MCP 401 和 403:区分登录、Token、scope 和资源权限
MCP 返回 401 时先检查身份是否被接受,403 则要看 Token 的 scope 和目标资源权限。两种状态都只换 Key,会把认证和授权混成一个问题。
从 401 变成 403,不是同一个错误换了数字
远程 MCP 返回 401 后用户换了三次 Token;改成 403 又继续换 Key。实际上 401 是登录无效,403 是 Token 已识别但缺少目标资源 scope。
- 401 与 403 使用不同诊断路径
- Token 内容与日志已脱敏
- 授权只提升到任务所需范围
MCP 401 403,先从“持续 401”这一类现象查起
持续 401
- 原因
- 凭证缺失、过期、类型错误、受众或签名不匹配。
- 怎么改
- 检查客户端实际发送的认证方式、令牌来源与过期,不打印完整值;重新授权而非随机换 Key。
登录后 403
- 原因
- 用户、组织、scope、资源 ACL、网络或策略不允许。
- 怎么改
- 记录身份、目标资源和动作,对照最小所需 scope 与资源权限,使用服务端审计日志。
同一 Token 部分资源成功
- 原因
- 认证有效,但资源级权限或租户范围不同。
- 怎么改
- 比较成功与失败资源的所有者、组织、角色和路径,避免扩大成全局权限。
浏览器授权成功但客户端仍失败
- 原因
- 回调、状态、缓存、配置作用域或旧令牌未更新。
- 怎么改
- 确认当前客户端读取的新授权,清理安全缓存并重新加载,保存时间线。
复测前,固定原始现象、环境和目标
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | 同一端点两次响应:401 `invalid_token`,更新 Token 后 403 `insufficient_scope`;requestId 均保存。 |
| 不能越过的边界 | 认证身份与授权权限分开;核对 Token 目标、过期、scope 和资源 ACL;凭证不写日志。 |
| 要交付的结果 | 认证授权诊断记录 |
同一个 Token 成功和失败时,先比较资源,不要立刻换 Key
| 请求 | 状态 | 优先检查 | 不能直接推断 |
|---|---|---|---|
| 列出公共工具 | 200 | 认证、Server 和基础 scope 已生效 | 不代表可访问私有资源 |
| 读取组织项目 | 401 | Token 是否发送、过期、类型和受众 | 不一定是账号被封 |
| 读取同组织另一资源 | 403 | 角色、项目 ACL、scope 和资源路径 | 不一定要换更大权限 |
| 浏览器能用,Client 403 | 403 | Client 使用的账号、缓存和作用域 | 不代表 Server 拒绝所有请求 |
状态码语义受具体 Server 实现影响;最终判断必须结合原始响应、文档和服务端审计日志。
MCP 401 403:按原条件复测的结果
原始现象
所有失败都被称为“Key 不对”,处理动作只有生成新 Key。
认证授权诊断记录
第一次通过重新登录解决 401;第二次保留当前 Token,仅申请只读 scope 后 200。诊断记录写明身份、Token audience、scope、资源和时间,不扩大到管理员权限。
