返回市场
麦克斯

麦克斯

作者:danvega13 星标更新:2025-10-17

项目介绍

使用Spring AI保护的MCP服务器

使用Spring授权服务器和GitHub OAuth2来保护模型上下文协议(MCP)服务器的演示。用户通过GitHub进行身份验证,接收一个JWT令牌,并使用该令牌调用受保护的MCP工具。

基于Daniel Garnier-Moiroux的文章: https://spring.io/blog/2025/09/30/spring-ai-mcp-server-security

使用Spring AI保护MCP服务器

架构

┌─────────────┐
│   GitHub    │ (身份提供者)
└──────┬──────┘
       │
       ▼
┌────────────────────────┐
│  授权服务器            │ (端口9000)
│  - GitHub OAuth登录    │
│  - 发放JWT令牌         │
└──────┬─────────────────┘
       │
       ▼
┌─────────────┐  Authorization: Bearer <JWT>   ┌──────────────┐
│ MCP客户端   │──────────────────────────────► │  MCP服务器   │ (端口8080)
└─────────────┘                                │  - 2个工具   │
                                               └──────────────┘

项目结构

mcps/
├── pom.xml                                   # 父POM
├── mvnw                                      # Maven包装器
│
├── authorization-server/                     # 端口9000
│   └── src/main/java/dev/danvega/authserver/
│       ├── AuthServerApplication.java        # 主应用程序
│       ├── SecurityConfig.java               # OAuth2 + GitHub登录
│       └── application.yml                   # 配置
│
└── mcp-server/                               # 端口8080
    └── src/main/java/dev/danvega/mcps/
        ├── Application.java                  # 主应用程序
        ├── McpServerSecurityConfig.java      # JWT验证
        └── McpToolsService.java              # MCP工具(echo, getCurrentUser)

快速开始

1. 先决条件

  • Java 21+
  • Maven 3.6+
  • GitHub账户

2. 创建GitHub OAuth应用

  1. 转到GitHub开发者设置
  2. 创建一个新的OAuth应用:
    • 应用名称:MCP授权服务器
    • 主页URLhttp://localhost:9000
    • 回调URLhttp://localhost:9000/login/oauth2/code/github
  3. 保存客户端ID客户端密钥

3. 设置环境变量

export GITHUB_CLIENT_ID="your-github-client-id"
export GITHUB_CLIENT_SECRET="your-github-client-secret"

4. 构建和运行

# 构建两个模块
./mvnw clean install

# 终端1:启动授权服务器(必须先启动!)
./mvnw spring-boot:run -pl authorization-server

# 终端2:启动MCP服务器
./mvnw spring-boot:run -pl mcp-server

授权服务器在端口9000上运行,MCP服务器在端口8080上运行。

使用MCP Inspector测试

打开认证设置

快速OAuth流程

连接

MCP Inspector工具提供了一种简单的方式来测试完整的OAuth2流程并与您的受保护MCP服务器交互。

可用的MCP工具

1. echo - 回显带有时间戳的消息

{"message": "Hello"}

2. getCurrentUser - 获取已认证用户的详细信息

{}

关键特性

授权服务器(端口9000)

  • GitHub OAuth2联合登录
  • 发放JWT访问令牌(有效期15分钟)
  • 刷新令牌(有效期1天)
  • 标准的OAuth2/OIDC端点

MCP服务器(端口8080)

  • 使用授权服务器的JWKS进行JWT验证
  • 验证受众声明
  • 两个受保护的MCP工具
  • 无状态架构

有用的端点

# 授权服务器元数据
curl http://localhost:9000/.well-known/oauth-authorization-server

# JWKS(用于JWT验证的公钥)
curl http://localhost:9000/oauth2/jwks

配置详情

MCP客户端预注册了以下凭据:

  • 客户端IDmcp-server
  • 客户端密钥secret
  • 范围openid, profile, email, mcp.server, mcp.tools

令牌的有效期配置在authorization-server/src/main/resources/application.yml中:

  • 访问令牌:15分钟
  • 刷新令牌:1天
  • 授权码:5分钟

故障排除

401未授权?

  • 确保授权服务器已首先运行(端口9000)
  • 检查您的令牌是否未过期(有效期15分钟)
  • 如需,请获取新的令牌

GitHub OAuth不起作用?

  • 验证回调URL:http://localhost:9000/login/oauth2/code/github
  • 检查GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET是否已设置

参考资料