概述

MCPHub 提供灵活的身份认证机制来保护您的 MCP 服务器管理平台。系统支持多种身份认证方法和基于角色的访问控制。

身份认证方法

基于环境变量的认证

使用环境变量配置基础认证:
# 基础认证凭据
AUTH_USERNAME=admin
AUTH_PASSWORD=your-secure-password

# JWT 设置
JWT_SECRET=your-jwt-secret-key
JWT_EXPIRES_IN=24h

数据库认证

对于生产环境部署,启用基于数据库的用户管理:
{
  "auth": {
    "provider": "database",
    "database": {
      "url": "postgresql://user:pass@localhost:5432/mcphub",
      "userTable": "users"
    }
  }
}

用户管理

创建用户

通过管理界面或 API 创建用户:
# 通过 API
curl -X POST http://localhost:3000/api/auth/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -d '{
    "username": "newuser",
    "email": "user@example.com",
    "password": "securepassword",
    "role": "user"
  }'

用户角色

MCPHub 支持基于角色的访问控制:
  • 管理员: 完整系统访问权限、用户管理、服务器配置
  • 管理者: 服务器管理、组管理、监控
  • 用户: 在分配组内的基本服务器访问权限
  • 查看者: 对分配资源的只读访问权限

基于组的访问控制

将用户分配到组

# 添加用户到组
curl -X POST http://localhost:3000/api/groups/{groupId}/users \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"userId": "user123"}'

组权限

配置组级别权限:
{
  "groupId": "dev-team",
  "permissions": {
    "servers": ["read", "write", "execute"],
    "tools": ["read", "execute"],
    "logs": ["read"],
    "config": ["read"]
  }
}

API 认证

JWT 令牌认证

// 获取认证令牌
const response = await fetch('/api/auth/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    username: 'your-username',
    password: 'your-password',
  }),
});

const { token } = await response.json();

// 在后续请求中使用令牌
const protectedResponse = await fetch('/api/servers', {
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

API 密钥认证

为系统集成生成 API 密钥:
# 生成新的 API 密钥
curl -X POST http://localhost:3000/api/auth/api-keys \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "Integration Key",
    "permissions": ["servers:read", "servers:write"],
    "expiresAt": "2024-12-31T23:59:59.000Z"
  }'

安全设置

HTTPS 配置

为生产环境启用 HTTPS:
server {
    listen 443 ssl http2;
    server_name mcphub.example.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

会话安全

配置安全的会话设置:
// 会话配置
{
  "session": {
    "secret": "your-session-secret",
    "secure": true,  // 生产环境中需要 HTTPS
    "httpOnly": true,
    "maxAge": 86400000,  // 24 小时
    "sameSite": "strict"
  }
}

速率限制

实施 API 速率限制:
{
  "rateLimit": {
    "windowMs": 900000,  // 15 分钟
    "max": 100,  // 每个 IP 限制 100 个请求
    "message": "请求过于频繁,请稍后再试",
    "standardHeaders": true,
    "legacyHeaders": false
  }
}

多因素认证 (MFA)

启用 TOTP

为管理员帐户启用基于时间的一次性密码:
# 启用 MFA
curl -X POST http://localhost:3000/api/auth/mfa/enable \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "type": "totp",
    "appName": "MCPHub"
  }'

验证 MFA 代码

// 登录时验证 MFA
const loginResponse = await fetch('/api/auth/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    username: 'admin',
    password: 'password',
    mfaCode: '123456', // 来自认证器应用的 6 位数字
  }),
});

审计日志

启用审计日志

跟踪所有认证和授权事件:
{
  "audit": {
    "enabled": true,
    "logLevel": "info",
    "events": [
      "login",
      "logout",
      "password_change",
      "role_change",
      "permission_change",
      "server_access",
      "config_change"
    ],
    "storage": {
      "type": "database",
      "retention": "90d"
    }
  }
}

查看审计日志

# 获取审计日志
curl -X GET "http://localhost:3000/api/audit/logs?startDate=2024-01-01&endDate=2024-01-31" \
  -H "Authorization: Bearer $TOKEN"

密码策略

配置密码要求

{
  "passwordPolicy": {
    "minLength": 12,
    "requireUppercase": true,
    "requireLowercase": true,
    "requireNumbers": true,
    "requireSpecialChars": true,
    "preventCommonPasswords": true,
    "preventReuse": 5, // 防止重复使用最近 5 个密码
    "maxAge": 7776000 // 90 天后过期
  }
}

故障排除

常见认证问题

  1. JWT 令牌过期
    # 检查令牌有效期
    curl -X GET http://localhost:3000/api/auth/verify \
      -H "Authorization: Bearer $TOKEN"
    
  2. 权限被拒绝
    # 检查用户权限
    curl -X GET http://localhost:3000/api/auth/permissions \
      -H "Authorization: Bearer $TOKEN"
    
  3. 会话问题
    • 清除浏览器 cookies
    • 检查会话配置
    • 验证服务器时间同步

调试认证流程

启用调试日志:
# 设置环境变量
export DEBUG=auth:*
export LOG_LEVEL=debug

# 启动服务器
npm start

安全最佳实践

  1. 定期更新凭据: 定期轮换 JWT 密钥和 API 密钥
  2. 最小权限原则: 只授予用户执行其任务所需的最小权限
  3. 监控异常活动: 设置警报以检测可疑的登录模式
  4. 备份配置: 定期备份认证配置和用户数据
  5. 安全更新: 保持 MCPHub 和依赖项的最新状态
更多安全配置选项,请参阅 环境变量配置Docker 设置 文档。