
Spring 기반 AI 프로젝트를 진행하다 보면 보안 설정이 필수적인 순간이 옵니다. 특히 여러 클라이언트와 서버가 연동되는 MCP(Multi-Component Platform) 구조에서는 인증과 권한 처리가 핵심입니다. 이 글에서는 Spring AI에서 제공하는 MCP(Server와 Client)에 OAuth2 인증을 적용하는 방법을 단계별로 설명합니다. 외부 인증 서버를 활용한 구조, 실용적인 설정 예제, 그리고 실무에서 자주 묻는 질문까지 모두 다룹니다. 복잡한 보안 개념을 명확하게 정리하고, 곧바로 적용 가능한 설정 예제로 구성했으니, Spring Security가 낯선 개발자라도 쉽게 따라올 수 있습니다.
Spring AI MCP란 무엇인가?
MCP는 Spring AI에서 제공하는 툴 기반 AI 통합 구조입니다. AI 기능(예: LLM, 챗봇 등)을 여러 개의 MCP Tool로 정의하고, 이를 MCP Server를 통해 호출합니다. Client는 MCP Server와 연결해 원하는 AI 기능을 사용할 수 있습니다. 이때 인증이 없다면 누구나 서버에 접근할 수 있기 때문에, 실무에 적용하기 위해선 반드시 OAuth2와 같은 인증 프레임워크를 도입해야 합니다.
MCP Server에 OAuth2 인증 적용하기
먼저 MCP Server가 외부 인증 서버로부터 발급된 Access Token을 검증할 수 있도록 설정합니다. 이때 MCP Server는 OAuth2 Resource Server로 동작합니다.
필요한 의존성 추가 (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
application.properties 설정 예시
server.port=8090
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:9000
이 설정은 http://localhost:9000에서 JWT 토큰을 발급하는 외부 인증 서버가 존재한다고 가정하고, 해당 서버의 토큰만 검증하도록 MCP Server를 구성합니다.
Authorization Server 구성하기
MCP Server에서 Access Token을 검증하려면, 이를 발급해주는 Authorization Server가 필요합니다. 기업 환경에서는 Keycloak, Okta 등 외부 솔루션을 사용하는 경우가 많지만, 테스트나 PoC 용도로는 직접 구현할 수도 있습니다.
필요한 의존성
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
application.yml 설정 예시
server:
port: 9000
servlet:
session:
cookie:
name: MCP_AUTHSERVER_SESSION
spring:
security:
user:
name: user
password: password
oauth2:
authorizationserver:
client:
oidc-client:
registration:
client-id: mcp-client
client-secret: "{noop}mcp-secret"
authorization-grant-types:
- authorization_code
- client_credentials
- refresh_token
redirect-uris:
- http://127.0.0.1:8080/authorize/oauth2/code/authserver
이 설정은 mcp-client라는 클라이언트를 등록하고, 다양한 Grant Type을 지원하도록 구성합니다.
MCP Client 보안 설정하기
이제 MCP Client가 OAuth2 인증을 통해 MCP Server에 안전하게 접근하도록 설정합니다. Client는 client_credentials와 authorization_code 방식을 모두 활용합니다.
필수 의존성
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
application.properties 설정 예시
spring.ai.mcp.client.sse.connections.server1.url=http://localhost:8090
spring.ai.mcp.client.type=SYNC
spring.security.oauth2.client.provider.authserver.issuer-uri=http://localhost:9000
spring.security.oauth2.client.registration.authserver.client-id=mcp-client
spring.security.oauth2.client.registration.authserver.client-secret=mcp-secret
spring.security.oauth2.client.registration.authserver.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.authserver.provider=authserver
spring.security.oauth2.client.registration.authserver-client-credentials.client-id=mcp-client
spring.security.oauth2.client.registration.authserver-client-credentials.client-secret=mcp-secret
spring.security.oauth2.client.registration.authserver-client-credentials.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.authserver-client-credentials.provider=authserver
클라이언트 초기화 및 MCP Tool 목록 조회 등 시스템 간 통신은 client_credentials로 처리하고, 사용자 인터페이스를 통한 툴 호출은 authorization_code로 처리하는 구조입니다.
OAuth2 필터 적용: 사용자 vs 시스템 권한 분리
MCP Client 요청 시, 어떤 컨텍스트에서는 사용자 토큰을, 어떤 컨텍스트에서는 시스템 토큰을 사용해야 합니다. 이를 구분해주는 커스텀 ExchangeFilterFunction을 구현해야 합니다.
핵심 개념 정리
- 사용자 요청 시: authorization_code로 발급된 사용자 토큰 사용
- 시스템 초기화 시: client_credentials로 발급된 애플리케이션 토큰 사용
이 로직을 처리하는 커스텀 ExchangeFilterFunction을 구현하여 WebClient에 연결하면 됩니다. 공식 데모에서 제공되는 코드를 참고해 그대로 사용할 수 있습니다.
전체 흐름 요약
- MCP Server는 외부 인증 서버가 발급한 Access Token을 검증하는 Resource Server 역할을 합니다.
- Authorization Server는 OAuth2 규격에 따라 토큰을 발급하며, 클라이언트 인증을 처리합니다.
- MCP Client는 WebClient를 사용해 MCP Server에 요청을 보내며, 사용자/시스템 권한에 따라 적절한 토큰을 자동으로 적용합니다.
실무 적용 시 고려할 점
OAuth2 기반 인증을 Spring AI MCP 구조에 적용하는 것은 복잡하게 느껴질 수 있지만, 핵심 흐름을 이해하고 나면 설정만으로도 충분히 강력한 보안 구성이 가능합니다. 특히 Authorization Server와 Client 설정을 분리하고, 사용자와 시스템 권한을 명확히 나누는 방식은 실무에서도 매우 유용합니다.
Spring Security와 Spring AI의 강력한 확장성을 활용해, 자신만의 인증 로직을 손쉽게 구축해 보세요. 향후 Spring 팀은 더 간단한 설정 방식과 세분화된 권한 제어 기능도 제공할 예정입니다.
https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2?fbclid=IwY2xjawKh60FleHRuA2FlbQIxMQBicmlkETF2bk9raE1PRzBqUFRFNlR0AR5SjVcyjg5qpjVoSXrJgCV-bEuVwFu2mCGTZjfsi6cs6Td-hEzu5LSj08guuw_aem_tC-yUlaZww2UjCCR_3jcCg
MCP Authorization in practice with Spring AI and OAuth2
Last month, we explored how to secure Spring AI MCP Servers[1] with the OAuth2 authorization framework. In the conclusion of that article, we mentioned we'd explore using standalone Authorization Servers for MCP Security and deviate from the then-current s
spring.io

'Spring' 카테고리의 다른 글
Spring Framework 7.0 & Spring Boot 4.0, 지금 알아둬야 할 핵심 변화 (0) | 2025.05.26 |
---|---|
Spring Boot 3.4에서 One-Time Token 로그인 구현하기 – 비밀번호 없이 안전한 인증 방식! (0) | 2025.02.23 |
Spring Boot로 빠르게 시작하는 Spring 개발 – 차이점과 장점 알아보기! (2) | 2024.10.30 |
Spring Cloud Config로 설정 관리 자동화하기: 개념부터 Private Git 연동까지 (0) | 2024.10.08 |
AI 애플리케이션의 미래를 바꿀 Spring AI Advisors를 만나보세요 (0) | 2024.10.08 |