OAuth认证MCP服务器

一个支持OAuth 2.0认证的模块化MCP协议服务器,提供安全日志匿名化和生产级部署能力,适用于企业级应用集成。

  • by andycop
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 andycop/mcp-server

使用说明

使用OAuth 2.0的MCP服务器

具有Microsoft Azure OAuth身份验证的安全模型上下文协议(MCP)服务器,具有模块化架构和全面的日志匿名化。

特性

  • OAuth 2.0身份验证 -Microsoft Azure/MS365与PKCE支持的集成
  • MCP协议支持 -与Claude Desktop和其他MCP客户端兼容
  • 模块化架构 -可维护性关注点的清晰分离
  • 安全日志记录 -敏感数据(令牌、秘密、租户ID)的自动匿名化
  • 可选Redis存储 -自动回退到内存中进行开发
  • 生产就绪 -环境验证、优雅关机、安全标头

快速开始

先决条件

  • Node.js 18+
  • Microsoft Azure应用程序注册

安装

git clone <repository-url>
cd mcp-server
npm install

环境变量

创建一个 .env 文件:

# Required
MS_CLIENT_ID=your-azure-client-id
MS_CLIENT_SECRET=your-azure-client-secret
MS_TENANT=your-azure-tenant-id
SESSION_SECRET=your-random-session-secret
REDIRECT_URI=http://localhost:3131/auth/callback

# Optional
REDIS_URL=redis://localhost:6379
PORT=3131
NODE_ENV=development

发展

npm run dev     # Start with hot reload
npm run build   # Build TypeScript
npm start       # Production mode

用法

浏览器访问

  1. 引导到 http://localhost:3131
  2. 点击“使用MS365登录”
  3. 完成Microsoft身份验证
  4. 访问受保护的端点

MCP客户端集成

{
  "mcpServers": {
    "secure-mcp": {
      "command": "node",
      "args": ["/path/to/mcp-server/dist/server.js"],
      "env": {
        "MS_CLIENT_ID": "your-client-id",
        "MS_CLIENT_SECRET": "your-client-secret",
        "SESSION_SECRET": "your-session-secret",
        "REDIRECT_URI": "http://localhost:3131/auth/callback"
      }
    }
  }
}

API终点

  • GET / -具有身份验证状态的登录页面
  • GET /health -健康检查(公众)
  • GET /login -启动OAuth流
  • GET /logout -销毁会话
  • GET /status -用户状态(受保护)
  • POST /v1/mcp -MCP协议端点(受保护)
  • GET /v1/mcp -MCP SSE端点(受保护)

OAuth 2.0授权服务器

用于MCP客户端身份验证的内置OAuth服务器:

  • GET /authorize -授权端点
  • POST /token -令牌交换端点
  • GET /.well-known/oauth-authorization-server -发现元数据

建筑

src/
├── server.ts          # Main Express application
├── auth/
│   ├── oauth.ts       # OAuth 2.0 authorization server
│   └── middleware.ts  # Authentication middleware
├── mcp/
│   └── server.ts      # MCP server factory and management
├── storage/
│   └── tokens.ts      # Token storage (Redis optional)
├── utils/
│   └── logger.ts      # Secure logging with anonymization
└── views/
    └── index.html     # HTML template

安全功能

  • 关键匿名 -日志中的所有敏感数据都会自动屏蔽
  • 环境验证 -缺少所需配置时快速失败
  • 安全会话 -具有CSRF保护的仅限HTTP的Cookie
  • PKCE支持 -用于增强安全性的代码交换证明密钥
  • 安全标头 -Helmet.js用于全面的安全标头

生产部署

  1. 集 NODE_ENV=production
  2. 配置 REDIS_URL 用于令牌存储
  3. 使用HTTPS REDIRECT_URI
  4. 设置安全会话配置
  5. 监控安全事件日志

贡献

看 建筑.md 获取详细的技术文档。

许可证

国际协调委员会