Twilio Verify API와 Python FastAPI를 활용해 TOTP(Time-based One-Time Password) 기반 패스워드리스 인증을 구현하는 방법을 다룬다. Authy 같은 인증 앱과 QR 코드 스캔으로 2FA를 설정하고, 이후 생성되는 6자리 코드로 로그인하는 3단계 흐름을 FastAPI로 구현한다.
핵심 포인트- Twilio Verify API가 TOTP Factor 생성, QR 코드 URI 제공, 코드 검증을 모두 처리해 자체 TOTP 라이브러리 없이 구현 가능하다
- 3단계 흐름: 사용자명 제출 + Factor 생성 → QR 스캔 + 초기 코드 검증(활성화) → 이후 6자리 코드로 로그인
- FastAPI + Jinja2 + 세션 미들웨어 조합으로 멀티 스텝 인증 상태를 유지한다
- 비밀번호 방식 대비 모바일 기기 기반 인증으로 탈취 위험을 줄인다
상세 정리- 의존성: FastAPI, Uvicorn, twilio Python SDK, python-dotenv, qrcode, Jinja2 설치 필요
- 환경 설정: .env 파일에 TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_VERIFY_SERVICE_SID 설정
- Factor 생성: Twilio REST API로 TOTP Factor 리소스 생성 → binding.uri 반환 → QR 코드 이미지로 변환해 브라우저에 표시
- Factor 활성화: 사용자가 Authy/Google Authenticator로 QR 스캔 후 첫 6자리 코드 제출 → Verify API 검증 → Factor 상태 verified 전환
- 이후 인증: 앱에서 생성된 코드를 /validate 엔드포인트에 제출 → Verify API로 검증 → 로그인 완료
- 세션 관리: FastAPI 세션 미들웨어로 Factor SID 등 상태를 요청 간 유지
- 3개 엔드포인트: /create(Factor 생성 + QR 표시), /verify(초기 코드 검증), /validate(로그인 코드 확인)
- 보안 고려: TOTP 시크릿을 Twilio가 관리해 서버에 직접 보관하지 않아도 된다
왜 읽나Python 웹앱에 패스워드리스 2FA를 빠르게 추가하려는 백엔드 엔지니어에게 Twilio Verify TOTP 연동의 실전 가이드.