Vercel Connect가 AI 에이전트의 외부 서비스 연동 보안 패러다임을 장기 저장 토큰에서 런타임 자격증명 교환(runtime credential exchange) 모델로 전환한다. 에이전트가 Slack, GitHub, Salesforce 등에 접근할 때 환경에 저장된 장기 토큰 대신, 작업 범위만큼만 제한된 단기 토큰을 요청 시점에 OIDC 신원 검증으로 발급받는다.
핵심 포인트- OIDC 신원 증명 기반으로 Vercel 배포가 토큰 요청 시 프로젝트/환경 권한 검증 후 제공자 자격증명을 반환한다
- getToken('slack/mybot', { subject: { type: 'app' } }) 한 번의 API 호출로 단기 자동갱신 토큰을 획득, 앱 내 저장 불필요
- GitHub 토큰을 특정 저장소 + 읽기 권한 수준으로 제한하는 세분화된 scoped authorization을 지원한다
- 사용자 대신 동작하는 에이전트는 subject.type을 'user'로 지정해 사용자별 OAuth 스코핑이 가능하다
- Slack 웹훅을 Vercel Connect가 먼저 수신해 서명 검증 후 OIDC로 재서명, 앱이 봇 토큰이나 서명 시크릿을 보유하지 않는 구조
상세 정리- 기존 문제: 환경변수 장기 토큰은 누출 시 모든 시스템 노출, 모든 사용자가 동일 토큰 공유, 만료 없음, 소작업에도 전체 권한 부여
- 아키텍처 4단계: 커넥터 등록 → 런타임 단기 자격증명 요청 → OIDC 신원으로 앱 검증 → 작업 범위 제한 토큰 반환
- CLI 등록: vercel connect create slack --name mybot으로 커넥터 생성, 프로젝트/환경 간 재사용 가능한 단일 엔티티
- TypeScript SDK: await getToken(provider, { subject, authorizationDetails }) 형태, 토큰 자동 갱신, 앱 저장 불필요
- GitHub 세분화 예시: authorizationDetails에 repositories 목록과 permissions를 명시해 contents:read만 허용하는 최소권한 토큰 발급
- 사용자 스코핑: subject: { type: 'user', id: 'user_123' }로 지정, OAuth 승인 후 해당 사용자 권한 범위 내에서만 에이전트 동작
- 환경 격리: 개발/프리뷰/프로덕션 환경별 별도 커넥터 운영 가능, vercel connect revoke-tokens로 즉시 전체 토큰 폐기
- 트리거 포워딩: Slack/GitHub/Linear 웹훅을 Vercel Connect가 수신해 Slack 서명으로 검증, OIDC로 재서명 후 앱에 전달 — 앱이 시크릿 값을 직접 보유하지 않음
- 프레임워크 통합: @vercel/connect/ai-sdk, @vercel/connect/mcp, eve 프레임워크의 defineMcpClientConnection 네이티브 지원
- 지원 서비스: Slack, GitHub, Linear, Discord, Notion, Salesforce, Figma, Snowflake 전용 커넥터 + 범용 OAuth/API 키 커넥터
- 가격 모델: Hobby 월 5,000 토큰 요청 무료, Pro/Enterprise는 10,000 요청당 $3
왜 읽나AI 에이전트에서 외부 서비스 연동 시 자격증명 보안 아키텍처를 어떻게 설계해야 하는지 실제 코드와 함께 보여주는 레퍼런스다.