
在 AI 集成领域卷得飞起的当下,保证 AI 模型和外部工具之间通信安全,那可是头等大事。Spring AI 的模型上下文协议(MCP)本来就很擅长搞定这种交互,如今又更新了一波 —— 把 OAuth2 这层 “安全铠甲” 嵌进去的操作,简直比喝奶茶加珍珠还丝滑。
01
为啥 MCP 非得配上 OAuth2?
MCP 服务器要是在本地用 STDIO 传输,那倒还好说。可一旦要把它暴露到外部网络(尤其是企业环境里),没点靠谱的身份验证和权限管理,那不就跟家门没锁一样危险?好在最新版 MCP 规范(截至 2025 年 3 月 26 日)已经想到了这茬,直接抱上了 OAuth2 这个 “业界网红” 框架的大腿,给客户端和服务器的安全通信打了个稳稳的地基。
02
一人分饰两角:MCP 服务器既是 “资源管家” 也是 “授权官”
在这套配置里,MCP 服务器直接扛起了两个关键角色,堪称 AI 界的 “斜杠青年”:
03
手把手教你给 Spring MCP 服务器装 OAuth2 “安全锁”
咱就拿 Spring AI 示例仓库里的 “天气查询” MCP 工具举例,一步步把 OAuth2 嵌进去,操作简单到像拼乐高:
1. 先把必备 “零件”(依赖)装上
第一步,在 pom.xml 里加好 Spring Boot 的 “启动器”,少了它们可不行:
<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 客户端的信息配置好,就像给新员工录入职信息:
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 类,把安全过滤链定义清楚,相当于给服务器装上门禁系统:
@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();
}
}这套配置的作用,咱一句话说明白:
4. 拿令牌、发请求,一步到位
想跟加了 “安全锁” 的 MCP 服务器互动?先得搞到 access_token,用 curl 一行命令搞定:
curl -XPOST http://localhost:8080/oauth2/token \
--data grant_type=client_credentials \
--user mcp-client:secret执行完会返回一个 JSON,里面就有你要的 access_token。
接下来用这个令牌发请求,把 “YOURACCESSTOKEN” 换成刚拿到的令牌就行:
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 集成打下了好底子。