Implementing MCP OAuth with AWS Lambda and WorkOS
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

MCP OAuth 인증 구현: AWS Lambda와 WorkOS 활용

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

DevOps

대상자

  • 대상자: AWS Lambda, API Gateway, OAuth 인증 시스템을 사용하는 개발자 및 DevOps 엔지니어
  • 난이도: 중급 이상 (Rust, AWS CDK, Lambda Authorizer 경험 필요)

핵심 요약

  • AWS Lambda 기반 MCP 서버 구축: API Gateway + Lambda Authorizer를 활용한 무상태 서버리스 아키텍처
  • axum 프레임워크 사용, Rust 언어 기반
  • OAuth 인증 흐름 구현: .well-known/oauth-authorization-server 엔드포인트 제공
  • grant_types_supported, response_types_supported 등 OAuth 2.0 스펙 준수
  • 인프라 설정: AWS CDK + SAM Local을 통한 Lambda 함수 및 HTTP API Gateway 배포
  • @cdklabs/aws-lambda-rust 라이브러리 사용

섹션별 세부 요약

1. MCP 서버 아키텍처 설계

  • 2개의 Lambda 함수 분리:

- Authorizer: OAuth 인증 로직 처리

- McpResourceServer: MCP 리소스 처리 로직

  • API Gateway 역할:

- Lambda Authorizer를 통해 요청 인증

- 리소스 서버는 인증 로직을 알 필요 없음

2. Rust 기반 코드 구현

  • Authorizer 함수:

```rust

async fn function_handler(event: LambdaEvent) -> Result {

Ok(Response { isAuthorized: false, context: HashMap::new() })

}

```

  • 기본적으로 Unauthorized 응답 반환
  • MCP 리소스 서버:

```rust

pub async fn mcp_handler() -> impl IntoResponse {

"hello"

}

```

  • /mcp 경로에 대한 간단한 테스트 응답 제공

3. 인프라 설정 (AWS CDK)

  • Lambda 함수 정의:

```typescript

const authorizer = new RustFunction(this, 'Authorizer', {

entry: '../authorizer/Cargo.toml',

environment: { RUST_LOG: 'info' }

});

```

  • @cdklabs/aws-lambda-rust 라이브러리 사용
  • HTTP API Gateway 구성:

```typescript

const httpApi = new cdk.aws_apigatewayv2.HttpApi(this, 'MCP-Auth-API');

httpApi.addRoutes({

path: '/mcp',

authorizer: new cdk.aws_apigatewayv2_authorizers.HttpLambdaAuthorizer('Authorizer', authorizer),

integration: new cdk.aws_apigatewayv2_integrations.HttpLambdaIntegration("mcp-resource", mcpResourceServer)

});

```

4. 테스트 및 확장

  • Goose 클라이언트 통합:

```bash

goose configure

```

  • mcp-remote 패키지 사용하여 Streamable HTTP MCP 서버 테스트
  • .well-known 엔드포인트 구현:

```rust

async fn well_known_handler() -> impl IntoResponse {

Json(WellKnownAnswer {

authorization_endpoint: "https://example.com/auth",

token_endpoint: "https://example.com/token",

...

})

}

```

  • OAuth 2.0 스펙에 따른 메타데이터 제공

결론

  • 핵심 팁:

- Lambda Authorizer를 통해 리소스 서버와 인증 로직 분리

- .well-known 엔드포인트 구현 시 OAuth 2.0 스펙 준수

- AWS CDK + SAM Local을 활용한 로컬 테스트 환경 구성 필수

  • 문제 해결: MCP 클라이언트의 401 응답 처리 및 /.well-known 엔드포인트 확장 필요