Skip to content

13.3 MCP 身份验证

MCP 支持多种身份验证方式,确保安全地连接到 MCP 服务器。

OAuth 2.0

OAuth 2.0 流程

MCP 服务器可以使用 OAuth 2.0 进行身份验证:

  1. Claude Code 发起 OAuth 请求
  2. 用户重定向到授权页面
  3. 用户授权应用
  4. 授权服务器返回访问令牌
  5. Claude Code 使用令牌访问 MCP 服务器
### 配置 OAuth 2.0

#### 添加 OAuth 服务器

    bash


    # 添加需要 OAuth 的服务器
    claude mcp add --transport http github https://api.githubcopilot.com/mcp/

#### 进行身份验证

    bash


    # 在 Claude Code 中进行身份验证
    /mcp
    # 选择需要身份验证的服务器
    # 选择 "github"

#### OAuth 流程

    bash


    # 1. Claude Code 显示授权 URL
    # 请访问以下 URL 进行授权:
    # https://github.com/login/oauth/authorize?client_id=...

    # 2. 用户访问 URL 并授权
    # 3. 授权服务器返回访问令牌
    # 4. Claude Code 保存令牌

### OAuth 2.0 作用域

#### 定义作用域

OAuth 2.0 使用作用域限制权限:

    bash


    # 添加带作用域的服务器
    claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
    --scope "repo,user"

#### 常见作用域


  * **repo** : 仓库访问权限
  * **user** : 用户信息访问权限
  * **admin** : 管理员权限
  * **read** : 只读权限
  * **write** : 读写权限

### 令牌管理

#### 查看令牌

    bash


    # 查看已保存的令牌
    显示 OAuth 令牌

#### 刷新令牌

    bash


    # 刷新访问令牌
    刷新 GitHub 令牌

#### 撤销令牌

    bash


    # 撤销访问令牌
    撤销 GitHub 令牌

## API 密钥

### 使用 API 密钥

#### 添加带 API 密钥的服务器

    bash


    # Bearer 令牌
    claude mcp add --transport http api https://api.example.com/mcp \
    --header "Authorization: Bearer your-api-key"

    # API 密钥
    claude mcp add --transport http api https://api.example.com/mcp \
    --header "X-API-Key: your-api-key"

    # 自定义标头
    claude mcp add --transport http api https://api.example.com/mcp \
    --header "X-Custom-Auth: your-custom-key"

#### 环境变量

使用环境变量传递 API 密钥:

bash
    bash


    # 设置环境变量
    export API_KEY="your-api-key"

    # 使用环境变量
    claude mcp add --transport http api https://api.example.com/mcp \
      --header "Authorization: Bearer ${API_KEY}"

### 密钥安全

#### 加密存储

Claude Code 加密存储 API 密钥:

    bash


    # 密钥自动加密存储
    claude mcp add --transport http api https://api.example.com/mcp \
    --header "Authorization: Bearer your-api-key"

#### 密钥轮换

定期轮换 API 密钥:

    bash


    # 1. 生成新密钥
    # 2. 更新服务器配置
    claude mcp remove api
    claude mcp add --transport http api https://api.example.com/mcp \
      --header "Authorization: Bearer new-api-key"

    # 3. 撤销旧密钥

## 证书身份验证

### 使用证书

#### 添加带证书的服务器

    bash


    # 使用客户端证书
    claude mcp add --transport http secure-api https://api.example.com/mcp \
    --cert /path/to/cert.pem \
    --key /path/to/key.pem

    # 使用 CA 证书
    claude mcp add --transport http secure-api https://api.example.com/mcp \
    --cacert /path/to/ca.pem

#### 证书格式

支持的证书格式:

  • PEM : 最常用的格式
  • DER : 二进制格式
  • PKCS12 : 包含私钥和证书
bash
### 证书管理

#### 查看证书

    bash


    # 查看证书信息
    openssl x509 -in /path/to/cert.pem -text -noout

#### 验证证书

    bash


    # 验证证书
    openssl verify -CAfile /path/to/ca.pem /path/to/cert.pem

#### 更新证书

    bash


    # 1. 获取新证书
    # 2. 更新服务器配置
    claude mcp remove secure-api
    claude mcp add --transport http secure-api https://api.example.com/mcp \
      --cert /path/to/new-cert.pem \
      --key /path/to/new-key.pem

## 自定义身份验证

### 自定义认证头

    bash


    # 使用自定义认证头
    claude mcp add --transport http custom-api https://api.example.com/mcp \
    --header "X-Custom-Auth: custom-value"

### 多因素认证

    bash


    # 使用多因素认证
    claude mcp add --transport http secure-api https://api.example.com/mcp \
      --header "X-Auth-Token: token" \
      --header "X-Auth-Code: code"

### 签名请求

    bash


    # 使用签名请求
    claude mcp add --transport http signed-api https://api.example.com/mcp \
    --header "X-Signature: signature" \
    --header "X-Timestamp: timestamp"

## 身份验证最佳实践

### 1\. 使用最小权限原则

    bash


    # 只请求必要的权限
    claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
      --scope "repo:read"

### 2\. 定期轮换凭证

    bash


    # 每 90 天轮换一次 API 密钥
    # 设置提醒

### 3\. 使用环境变量

    bash


    # 使用环境变量存储敏感信息
    export API_KEY="your-api-key"
    claude mcp add --transport http api https://api.example.com/mcp \
      --header "Authorization: Bearer ${API_KEY}"

### 4\. 加密存储

    bash


    # 使用加密存储
    # Claude Code 自动加密存储敏感信息

### 5\. 审计访问

    bash


    # 定期审计访问日志
    显示身份验证日志

## 故障排除

### OAuth 2.0 问题

#### 授权失败


**问题** : OAuth 授权失败

**解决方案** :

    bash


    # 1. 检查授权 URL
    /mcp

    # 2. 确认用户授权
    # 确保用户完成了授权流程

    # 3. 检查作用域
    # 确认请求的作用域正确

    # 4. 重新授权
    撤销 GitHub 令牌
    /mcp
    # 重新进行授权

#### 令牌过期


**问题** : 访问令牌过期

**解决方案** :

    bash


    # 1. 刷新令牌
    刷新 GitHub 令牌

    # 2. 如果刷新失败,重新授权
    撤销 GitHub 令牌
    /mcp
    # 重新进行授权

### API 密钥问题

#### 密钥无效


**问题** : API 密钥无效

**解决方案** :

    bash


    # 1. 验证密钥
    # 检查密钥是否正确

    # 2. 检查密钥权限
    # 确认密钥有足够的权限

    # 3. 更新密钥
    claude mcp remove api
    claude mcp add --transport http api https://api.example.com/mcp \
    --header "Authorization: Bearer new-api-key"

#### 密钥过期


**问题** : API 密钥过期

**解决方案** :

    bash


    # 1. 生成新密钥
    # 2. 更新服务器配置
    claude mcp remove api
    claude mcp add --transport http api https://api.example.com/mcp \
      --header "Authorization: Bearer new-api-key"

### 证书问题

#### 证书无效


**问题** : 证书无效

**解决方案** :

    bash


    # 1. 验证证书
    openssl verify -CAfile /path/to/ca.pem /path/to/cert.pem

    # 2. 检查证书有效期
    openssl x509 -in /path/to/cert.pem -text -noout | grep "Not After"

    # 3. 更新证书
    claude mcp remove secure-api
    claude mcp add --transport http secure-api https://api.example.com/mcp \
    --cert /path/to/new-cert.pem \
    --key /path/to/new-key.pem

#### 证书过期

问题 : 证书过期

bash
**解决方案** :

    bash


    # 1. 获取新证书
    # 2. 更新服务器配置
    claude mcp remove secure-api
    claude mcp add --transport http secure-api https://api.example.com/mcp \
      --cert /path/to/new-cert.pem \
      --key /path/to/new-key.pem

## 安全建议

### 1\. 保护凭证

    bash


    # 不要在代码中硬编码凭证
    # 使用环境变量
    export API_KEY="your-api-key"

    # 不要在版本控制中提交凭证
    # 添加到 .gitignore
    echo ".env" >> .gitignore

### 2\. 使用强凭证

    bash


    # 使用强密码
    # 使用长随机字符串作为 API 密钥
    # 定期轮换凭证

### 3\. 限制权限

    bash


    # 使用最小权限原则
    # 只授予必要的权限
    claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
    --scope "repo:read"

### 4\. 监控使用

    bash


    # 定期监控 API 使用
    显示 API 使用统计

    # 检查异常活动
    显示异常访问日志

### 5\. 及时撤销

    bash


    # 及时撤销不需要的凭证
    撤销 GitHub 令牌
    撤销 API 密钥

基于 MIT 许可发布 | 永久导航