요약
MCP C# SDK에 OAuth 2.1 인증 지원이 내장되어 간단하고 안전하며 표준화된 방식으로 보안을 구현할 수 있게 되었다는 내용을 다룬 기술 가이드입니다.
배경 및 문제점 OAuth 구현은 개발자들에게 항상 예상보다 복잡하고 흥미롭지 않은 작업이었습니다. 끝없는 구성, 권한 설정, 등록, 제공업체마다 미묘하게 다른 여러 엔드포인트, 신비로운 오류, 그리고 보안 허점을 만들 수 있다는 불안감이 항상 따라다녔습니다.
MCP C# SDK의 OAuth 지원 공식 Model Context Protocol(MCP) C# SDK에서 OAuth 2.1 인증 지원이 내장되어 개발자들이 몇 줄의 C# 코드만으로 MCP 서버와 클라이언트를 기본적으로 안전하게 만들 수 있습니다. 더 이상 처음부터 사양 구현을 직접 작성하거나 오래된 블로그 게시물에서 코드를 복사할 필요가 없습니다.
개발자에게 미치는 영향 SDK의 목표는 복잡하게 만들지 않는 것입니다. 이는 표준 OAuth 2.1에서 내장 인증 지원이 없다면 작성해야 할 보일러플레이트 코드를 제거한 것입니다. 개발자들은 토큰 엔드포인트, 구조, GET/POST 구분, 스코프 구성 등과 씨름할 필요 없이 실제로 관심 있는 기능 구축에 시간을 투자할 수 있습니다.
RFC 9728 지원 새로운 MCP 인증 사양이 RFC 9728: OAuth 2.0 Protected Resource Metadata를 지원하도록 설계되어 SDK도 이를 따릅니다. MCP 서버는 연결하는 MCP 클라이언트에게 "사용 중인 인증 서버와 방법"을 알려주는 명함을 제공할 수 있습니다.
PRM(Protected Resource Metadata) 문서 서버는 클라이언트에게 인증 구성을 알려주기 위해 JSON 형태의 메타데이터를 제공합니다:
{
"resource": "https://api.example.com/v1/",
"authorization_servers": ["https://auth.example.com"],
"scopes_supported": ["read:data", "write:data"],
"token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post"]
}
이 메타데이터는 잘 알려진 엔드포인트(.well-known/oauth-protected-resource)에 위치하여 클라이언트가 쉽게 찾아서 처리할 수 있습니다.
MCP 클라이언트 구축 OAuth 관련 구성은 전송 구성에 연결되며, 클라이언트는 Authorization Server를 인식할 필요가 없습니다. 많은 정보가 PRM 문서에서 제공되고 표준 발견 단계를 따르기 때문입니다:
var transport = new SseClientTransport(new()
{
Endpoint = new Uri(serverUrl),
Name = "Secure Weather Client",
OAuth = new()
{
ClientName = "ProtectedMcpClient",
RedirectUri = new Uri("http://localhost:1179/callback"),
AuthorizationRedirectDelegate = HandleAuthorizationUrlAsync,
}
}, httpClient, consoleLoggerFactory);
보호된 MCP 서버 구축 서버 측 구성은 조금 더 상세하지만 복잡하지 않습니다. AddJwtBearer는 JWT-bearer 인증 지원을 추가하는 표준 ASP.NET Core 구성요소이며, 내장된 검증 로직을 제공합니다. AddMcp에서는 PRM을 C# 형태로 정의하고, AddAuthorization, UseAuthentication, UseAuthorization, RequireAuthorization 등은 표준 ASP.NET Core 규칙을 따릅니다.
현재 상태 및 향후 계획 MCP C# SDK는 현재 프리뷰 상태이며 인증 로직이 새로 추가되어 일부 거친 부분이 있을 수 있습니다. 팀은 가까운 미래에 점진적인 개선을 계획하고 있으며, 문제가 발생하거나 아이디어가 있으면 GitHub 이슈를 열어 피드백을 제공할 것을 권장합니다.
참고 자료
- GitHub Repository: modelcontextprotocol/csharp-sdk
- NuGet Package: ModelContextProtocol
- MCP Specification: Authorization
- Standard: RFC 9728 OAuth 2.0 Protected Resource Metadata
토큰을 다루므로 보안 모범 사례를 읽는 것이 필수적입니다.