首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 AI 集成的狂飙时代,Spring AI 的 MCP 协议 + OAuth2 才是安全感天花板!

在 AI 集成的狂飙时代,Spring AI 的 MCP 协议 + OAuth2 才是安全感天花板!

作者头像
HELLO程序员
发布2026-06-26 20:50:32
发布2026-06-26 20:50:32
490
举报

在 AI 集成领域卷得飞起的当下,保证 AI 模型和外部工具之间通信安全,那可是头等大事。Spring AI 的模型上下文协议(MCP)本来就很擅长搞定这种交互,如今又更新了一波 —— 把 OAuth2 这层 “安全铠甲” 嵌进去的操作,简直比喝奶茶加珍珠还丝滑。

01

为啥 MCP 非得配上 OAuth2?

MCP 服务器要是在本地用 STDIO 传输,那倒还好说。可一旦要把它暴露到外部网络(尤其是企业环境里),没点靠谱的身份验证和权限管理,那不就跟家门没锁一样危险?好在最新版 MCP 规范(截至 2025 年 3 月 26 日)已经想到了这茬,直接抱上了 OAuth2 这个 “业界网红” 框架的大腿,给客户端和服务器的安全通信打了个稳稳的地基。

02

一人分饰两角:MCP 服务器既是 “资源管家” 也是 “授权官”

在这套配置里,MCP 服务器直接扛起了两个关键角色,堪称 AI 界的 “斜杠青年”:

  • 它会盯着请求里的 Authorization 头,检查有没有有效的 OAuth2 访问令牌(access_token)。这令牌可能是 JWT 格式,也可能是段 “不明觉厉” 的字符串,但它代表着客户端的 “权限通行证”。要是令牌没带或者是假的?不好意思,服务器直接把请求拦在门外。
  • 客户端先亮出自己的 “身份证明”,它验证通过后才会发 access_token。而且令牌的 “保质期”(过期时间)、能干嘛(权限范围)、给谁用(目标受众),全由它说了算。

03

手把手教你给 Spring MCP 服务器装 OAuth2 “安全锁”

咱就拿 Spring AI 示例仓库里的 “天气查询” MCP 工具举例,一步步把 OAuth2 嵌进去,操作简单到像拼乐高:

1. 先把必备 “零件”(依赖)装上

第一步,在 pom.xml 里加好 Spring Boot 的 “启动器”,少了它们可不行:

代码语言:javascript
复制
代码语言:javascript
复制
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>

2. 给 OAuth2 客户端 “填档案”

在 application.properties 里,把 OAuth2 客户端的信息配置好,就像给新员工录入职信息:

代码语言:javascript
复制
代码语言:javascript
复制
spring.security.oauth2.authorizationserver.client.oidc-client.registration.client-id=mcp-client
spring.security.oauth2.authorizationserver.client.oidc-client.registration.client-secret={noop}secret
spring.security.oauth2.authorizationserver.client.oidc-client.registration.client-authentication-methods=client_secret_basic
spring.security.oauth2.authorizationserver.client.oidc-client.registration.authorization-grant-types=client_credentials

这套配置是给 “机器对机器” 交互用的,用了 client_credentials 授权模式,简单直接,不整花活。

3. 搭好 “安全防护网”(安全配置)

建个 SecurityConfiguration 类,把安全过滤链定义清楚,相当于给服务器装上门禁系统:

代码语言:javascript
复制
代码语言:javascript
复制
@Configuration
@EnableWebSecurity
class SecurityConfiguration {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
       .with(authorizationServer(), Customizer.withDefaults())
       .oauth2ResourceServer(resource -> resource.jwt(Customizer.withDefaults()))
       .csrf(CsrfConfigurer::disable)
       .cors(Customizer.withDefaults())
       .build();
}
}

这套配置的作用,咱一句话说明白:

  • 所有请求都得先 “刷脸”(验证身份)才能过;
  • 授权服务器和资源服务器的功能全给开了;
  • 关了 CSRF 保护(非浏览器客户端用不上,纯属多余);
  • 开了 CORS 支持(跨域请求也能正常走)。

4. 拿令牌、发请求,一步到位

想跟加了 “安全锁” 的 MCP 服务器互动?先得搞到 access_token,用 curl 一行命令搞定:

代码语言:javascript
复制
代码语言:javascript
复制
curl -XPOST http://localhost:8080/oauth2/token \
--data grant_type=client_credentials \
--user mcp-client:secret

执行完会返回一个 JSON,里面就有你要的 access_token。

接下来用这个令牌发请求,把 “YOURACCESSTOKEN” 换成刚拿到的令牌就行:

代码语言:javascript
复制
代码语言:javascript
复制
curl http://localhost:8080/sse \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"

04

下一步该干啥?

OAuth2 的基础配置搞定后,接下来就该给客户端认证 “升个级” 了。比如整个 “授权码”(authorization code)授权模式,让用户能输自己的账号密码登录,再配合基于角色的访问控制(RBAC),权限管理能细到 “谁能看天气、谁能改天气数据”。

想亲手试试?直接去 spring-ai-examples 仓库看示例代码,照着敲一遍就懂了。

说到底,给 Spring AI 的 MCP 服务器嵌上 OAuth2,就像给 AI 系统装了个 “智能安全门”—— 既保证了访问安全,又能精准控制权限,为搞大规模、高安全的 AI 集成打下了好底子。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HELLO程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档