MCP OAuth 인증

Bob Shell은 사용자 위임 액세스가 필요한 MCP 서버에 대해 OAuth 2.1을 지원해요. Bob은 토큰 갱신을 포함한 인증 흐름을 자동으로 처리하므로 토큰을 수동으로 관리할 필요가 없어요.

참고:

일반적인 MCP 구성은 MCP 서버 구성을 참조하세요.

개요

일부 MCP 서버는 GitHub 리포지토리를 읽거나 Google Drive 파일에 액세스하는 등 사용자를 대신하여 작업해야 해요. 이러한 서버는 데이터에 액세스하기 전에 OAuth 2.1을 사용하여 동의를 요청해요.

Bob은 전체 OAuth 흐름을 자동으로 처리해요. OAuth가 필요한 서버에 연결하면 Bob이 브라우저에서 인증 흐름을 열어줘요. 사용자가 권한을 부여한 후 Bob은 추가 수동 단계 없이 토큰 저장 및 갱신을 관리해요.

이는 서비스 계정이나 만료되지 않는 토큰에 적합한 headers의 Bearer 토큰이나 env의 API 키와 같은 정적 인증 방법과 달라요. 다음과 같은 경우에 OAuth를 사용하세요:

  • 서버가 사용자 계정이 소유한 리소스에 액세스해야 하는 경우
  • 서버의 인증 서버가 갱신해야 하는 수명이 짧은 토큰을 발급하는 경우
  • MCP 구성 파일에 장기 보관 비밀을 저장하지 않으려는 경우

인증 흐름 작동 방식

  1. 구성 파일에 OAuth 지원 MCP 서버를 추가해요 (headers 또는 env 자격 증명이 필요하지 않음).
  2. Bob이 서버에 처음 연결할 때 서버의 OAuth 인증 메타데이터를 감지해요.
  3. Bob은 로그인하고 동의를 부여하도록 요청하는 브라우저 기반 인증 프롬프트를 열어요.
  4. 권한을 부여한 후 Bob은 세션 전반에 걸쳐 액세스 및 갱신 토큰을 안전하게 저장해요.
  5. Bob은 토큰이 만료되기 전에 자동으로 갱신해요. 갱신에 실패하지 않는 한 다시 메시지가 표시되지 않아요.
Bob Shell                   Authorization Server              MCP Server
   |                                |                               |
   |-- connect to server ---------->|                               |
   |<-- OAuth metadata (401) -------|                               |
   |-- open auth prompt ----------->|                               |
   |   (user signs in & consents)   |                               |
   |<-- authorization code ---------|                               |
   |-- exchange for tokens -------->|                               |
   |<-- access + refresh tokens ----|                               |
   |-- authenticated requests --------------------------------->    |
   |   (auto-refresh when needed)                                   |

OAuth 지원 서버 구성

OAuth 지원 MCP 서버는 인증 요구 사항을 자동으로 알립니다. 대부분의 경우 서버 URL만 있으면 되며 OAuth 필드는 선택 사항이에요. Bob은 다음의 선택적 OAuth 속성도 지원해요:

  • oauth: 서버에 대해 OAuth를 비활성화하려면 false로 설정하고 명시적으로 활성화하려면 true로 설정해요
  • clientId: 인증 서버에서 필요한 경우 OAuth 클라이언트 ID
  • clientSecret: 인증 서버에서 필요한 경우 OAuth 클라이언트 시크릿
  • scope: 요청할 OAuth 스코프의 공백으로 구분된 목록

~/.bob/mcp_settings.json (전역) 또는 .bob/mcp.json (프로젝트)의 구성 예시:

{
  "mcpServers": {
    "my-oauth-server": {
      "url": "https://your-server-url.com/mcp"
    }
  }
}

Bob은 연결 시 OAuth 요구 사항을 감지하고 흐름을 시작해요. headers 또는 env 자격 증명이 필요하지 않아요.

경고:

OAuth 지원 서버에 정적 Authorization 헤더를 추가하면 자동 OAuth가 완전히 비활성화돼요. Bob은 OAuth 흐름을 시도하지 않아요. 반대로 OAuth가 활성화되어 있으면 Bob은 요청을 보내기 전에 정적 Authorization 헤더를 제거해요. 한 가지 방법만 사용하세요.

메시지가 표시될 때 인증하기

Bob이 OAuth 지원 서버에 처음 연결할 때:

  1. 인증 프롬프트와 함께 브라우저 창이 열려요
  2. 서버가 요청하는 권한을 검토하세요
  3. 필요한 계정으로 로그인하고 동의를 부여하세요
  4. Bob이 토큰을 저장하고 연결을 자동으로 완료해요

프롬프트는 기본 브라우저에서 열려요. 인증을 완료하면 Bob Shell이 연결을 자동으로 재개해요.

문제 해결

인증 프롬프트가 나타나지 않음

  • 구성에서 서버가 비활성화된 것으로 표시되어 있지 않은지 확인하세요
  • Bob Shell을 다시 시작하여 서버 연결을 다시 시작하세요
  • 브라우저가 인증 페이지를 차단하고 있지 않은지 확인하세요

인증은 성공했지만 서버 연결에 실패함

  • 서버 URL이 올바르고 연결 가능한지 확인하세요
  • 동의 단계에서 필요한 모든 권한을 부여했는지 확인하세요
  • 추가 설정 요구 사항이 있는지 서버 문서를 검토하세요

토큰이 자주 만료되고 재인증이 필요함

  • 인증 서버가 갱신 토큰을 지원하는지 확인하세요. 일부 서버는 수명이 짧은 액세스 전용 토큰을 발급해요.
  • 시계 왜곡으로 인해 토큰이 조기에 만료될 수 있으므로 시스템 시계가 정확한지 확인하세요

로그아웃하거나 계정을 전환하려는 경우

구성 파일에서 서버 항목을 제거하거나 이름을 바꾸고 다시 추가하세요. 이렇게 하면 Bob이 이를 새 서버로 처리하고 다음 연결 시 새 인증 프롬프트를 트리거해요.

이 주제는 어떤가요?