Auth 객체와 리소스 수준 접근 제어를 유지하되, Supabase를 identity provider로 사용하도록 인증을 업그레이드합니다. 이 튜토리얼에서는 Supabase를 사용하지만, 개념은 모든 OAuth2 제공자에 적용됩니다. 다음 내용을 배우게 됩니다:
- 테스트 토큰을 실제 JWT 토큰으로 교체하기
- 안전한 사용자 인증을 위해 OAuth2 제공자와 통합하기
- 기존 권한 부여 로직을 유지하면서 사용자 세션 및 메타데이터 처리하기
배경
OAuth2는 세 가지 주요 역할을 포함합니다:- Authorization server: 사용자 인증을 처리하고 토큰을 발급하는 identity provider (예: Supabase, Auth0, Google)
- Application backend: LangGraph 애플리케이션. 토큰을 검증하고 보호된 리소스(대화 데이터)를 제공합니다
- Client application: 사용자가 서비스와 상호작용하는 웹 또는 모바일 앱
사전 요구사항
이 튜토리얼을 시작하기 전에 다음을 확인하세요:- 두 번째 튜토리얼의 봇이 오류 없이 실행되고 있어야 합니다.
- 인증 서버로 사용할 Supabase 프로젝트가 필요합니다.
1. 의존성 설치
필요한 의존성을 설치합니다.custom-auth 디렉토리에서 시작하고 langgraph-cli가 설치되어 있는지 확인하세요:
2. 인증 제공자 설정
다음으로 인증 서버의 URL과 인증을 위한 private key를 가져옵니다. Supabase를 사용하고 있으므로 Supabase 대시보드에서 이 작업을 수행할 수 있습니다:- 왼쪽 사이드바에서 ⚙️ “Project Settings”를 클릭한 다음 “API”를 클릭합니다
- 프로젝트 URL을 복사하여
.env파일에 추가합니다
- service role secret key를 복사하여
.env파일에 추가합니다:
- “anon public” key를 복사하여 기록해 둡니다. 이는 나중에 클라이언트 코드를 설정할 때 사용됩니다.
3. 토큰 검증 구현
이전 튜토리얼에서는Auth 객체를 사용하여 하드코딩된 토큰을 검증하고 리소스 소유권을 추가했습니다.
이제 Supabase의 실제 JWT 토큰을 검증하도록 인증을 업그레이드합니다. 주요 변경 사항은 모두 @auth.authenticate 데코레이터가 적용된 함수에 있습니다:
- 하드코딩된 토큰 목록을 확인하는 대신 Supabase에 HTTP 요청을 보내 토큰을 검증합니다.
- 검증된 토큰에서 실제 사용자 정보(ID, 이메일)를 추출합니다.
- 기존 리소스 권한 부여 로직은 변경되지 않습니다.
src/security/auth.py를 업데이트합니다:
src/security/auth.py
4. 인증 흐름 테스트
새로운 인증 흐름을 테스트해 봅시다. 파일이나 노트북에서 다음 코드를 실행할 수 있습니다. 다음을 제공해야 합니다:/login 요청을 수락합니다.
이제 사용자가 자신의 데이터만 볼 수 있는지 테스트합니다. 계속하기 전에 서버가 실행 중인지 확인하세요(langgraph dev 실행). 다음 스니펫은 인증 제공자 설정 중에 Supabase 대시보드에서 복사한 “anon public” key가 필요합니다.
- 사용자는 봇에 액세스하려면 로그인해야 합니다
- 각 사용자는 자신의 thread만 볼 수 있습니다
다음 단계
LangGraph 애플리케이션을 위한 프로덕션 준비 인증 시스템을 성공적으로 구축했습니다! 달성한 내용을 검토해 봅시다:- 인증 제공자 설정 (이 경우 Supabase)
- 이메일/비밀번호 인증을 사용한 실제 사용자 계정 추가
- LangGraph 서버에 JWT 토큰 검증 통합
- 사용자가 자신의 데이터만 액세스할 수 있도록 적절한 권한 부여 구현
- 다음 인증 과제를 처리할 준비가 된 기반 구축 🚀
- 선호하는 프레임워크로 웹 UI 구축 (예제는 Custom Auth 템플릿 참조)
- 인증에 대한 개념 가이드에서 인증 및 권한 부여의 다른 측면에 대해 자세히 알아보기
- 참조 문서를 읽은 후 핸들러와 설정을 추가로 사용자 정의하기
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.