MCP 服务认证优化:移除自定义头部,统一 OAuth 2.0

2026年02月06日1 次阅读0 人喜欢
MCPOAuth 2.0认证系统CursorClaude Code

最近在优化博客的 MCP 服务认证机制,主要做了几件事:移除了自定义的认证头部,统一使用标准的 OAuth 2.0 Bearer Token,同时兼容两种使用方式。

背景

博客的 MCP 服务之前支持三种认证方式:

  1. 自定义头部 x-mcp-accountx-mcp-password
  2. 标准 Authorization: Bearer <token>
  3. OAuth 2.0 授权码流程

说实话,那个自定义头部是早期的遗留设计,当时为了兼容性加的。但既然大家都支持标准 OAuth 2.0 了,留着它确实没什么必要,反而增加维护成本。

修改内容

这次主要是清理了 src/services/mcpAuth.ts 中的自定义头部认证逻辑,简化了认证流程。

修改前

typescript 复制代码
// 支持三种方式
export async function authenticateMcpRequestEnhanced(headers: Headers) {
  // 1. Bearer Token
  const user = await validateToken(token);
  if (user) return user;

  // 2. 长期 Token (LTK_)
  if (token.startsWith('LTK_')) {
    // ...
  }

  // 3. 自定义头部(已废弃)
  const account = headers.get('x-mcp-account');
  const password = headers.get('x-mcp-password');
  // ...
}

修改后

typescript 复制代码
// 只支持标准方式
export async function authenticateMcpRequestEnhanced(headers: Headers) {
  // 1. 普通 Bearer Token
  const user = await validateToken(token);
  if (user) return user;

  // 2. 长期 Token (LTK_)
  if (token.startsWith('LTK_')) {
    // ...
  }

  throw new Error("Invalid or expired token");
}

清爽多了。

现在支持的认证方式

方式一:Bearer Token(推荐用于简单配置)

这个适合直接配置,比如在 Cursor IDE 里:

json 复制代码
{
  "我的博客": {
    "url": "https://www.nnnnzs.cn/api/mcp",
    "headers": {
      "Authorization": "Bearer LTK_your_token_here"
    }
  }
}

生成长期 Token 的步骤:

  1. 访问 /c/user/info 页面
  2. 在"长期 Token"部分点击生成
  3. 复制 LTK_ 开头的 token

方式二:OAuth 2.0 授权码流程(推荐用于 CLI)

这个适合自动化流程,比如 Claude Code CLI:

bash 复制代码
# 添加 MCP 服务
claude mcp add MyBlog https://www.nnnnzs.cn/api/mcp

# 触发认证
claude mcp auth MyBlog

CLI 会自动:

  1. 发现 OAuth 端点
  2. 打开浏览器进行授权
  3. 获取并保存 Token
  4. 后续自动使用 Token

客户端配置指南

Cursor IDE 配置

Cursor 目前不支持自动触发 OAuth 流程,所以需要手动配置 Token:

json 复制代码
{
  "我的博客": {
    "url": "https://www.nnnnzs.cn/api/mcp",
    "headers": {
      "Authorization": "Bearer LTK_your_token_here"
    }
  }
}

Claude Code CLI 配置

Claude Code CLI 有专门的命令来处理 MCP 认证:

bash 复制代码
# 添加服务
claude mcp add MyBlog https://www.nnnnzs.cn/api/mcp

# 触发认证(会自动打开浏览器)
claude mcp auth MyBlog

# 查看状态
claude mcp list

# 移除服务
claude mcp remove MyBlog

认证成功后,CLI 会自动保存 Token,后续请求会自动带上。

OAuth 2.0 端点

为了方便集成,服务提供了标准的 OAuth 2.0 端点:

  • /.well-known/oauth-authorization-server - 服务器元数据
  • /register - 客户端注册
  • /authorize - 用户授权
  • /token - 获取 Token
  • /revoke - 撤销 Token

完全符合 RFC 6749 (OAuth 2.0) 和 RFC 8414 (Authorization Server Metadata) 标准。

兼容性说明

这次修改只是移除了自定义头部,不会影响现有的 OAuth 2.0 流程。

如果你之前用的是自定义头部,需要迁移到 Bearer Token:

  1. 生成一个新的长期 Token(LTK_ 开头)
  2. 更新客户端配置,使用 Authorization: Bearer 头部

总结

统一使用标准 OAuth 2.0 后,代码更简洁了,也更容易维护。

对于简单场景,用 Bearer Token 配置就行;对于需要自动化的场景,OAuth 2.0 授权码流程完全够用。

两种方式可以共存,根据实际需求选择就行。

说实话,早点移除自定义头部就好了,留着也是技术债务。

加载评论中...