FastAPI에서의 JWT 인증
인증은 "당신은 누구입니까?"라고 묻습니다. 인가는 "당신은 무엇을 할 수 있습니까?"라고 묻습니다.
보안 없이 AI 플랫폼을 구축하면 누구나 개인 데이터에 접근할 수 있습니다. 사용자 프로필을 변경하거나 학생의 학습 진행 상황을 볼 수도 있습니다. 반드시 리소스를 보호해야 합니다.
JWT (JSON Web Token)가 이 문제를 해결합니다. 매 요청마다 비밀번호를 보내는 대신, 사용자는 보안 토큰을 보냅니다.
워크플로우:
- 사용자 등록
- 비밀번호 해싱
- 로그인 및 자격 증명 확인
- JWT 토큰 생성
- 보호된 경로(routes) 접근
다음 도구들을 사용하는 것이 좋습니다:
- 비밀번호 해싱을 위한 passlib (with bcrypt)
- 토큰 생성을 위한 python-jose
비밀번호를 평문(plain text)으로 절대 저장하지 마세요. 해커가 데이터베이스를 탈취하면 모든 정보를 손에 넣게 됩니다. 대신 해시(hash)를 저장하세요.
해시는 "password123"을 긴 무작위 문자열로 변환합니다. 해시를 다시 비밀번호로 되돌릴 수는 없습니다. 입력값이 해시와 일치하는지만 확인합니다.
구축 방법:
회원가입 사용자가 사용자 이름과 비밀번호를 보냅니다. 비밀번호를 해싱하여 데이터베이스에 저장합니다.
로그인 사용자가 자격 증명을 보냅니다. 저장된 해시를 찾습니다. 라이브러리를 사용하여 비밀번호를 검증합니다. 일치하면 토큰을 생성합니다.
JWT 생성 토큰에는 사용자 데이터와 만료 시간이 포함됩니다. 비밀 키(secret key)로 토큰에 서명합니다. 사용자가 데이터를 변경하려고 하면 서명 검증이 실패합니다.
로그인 응답은 다음과 같습니다: { "access_token": "eyJhbGciOiJIUzI1Ni...", "token_type": "bearer" }
이제 사용자는 시스템에 접근할 수 있는 키를 갖게 되었습니다.
다음 파트에서는 이 토큰을 사용하여 특정 경로를 보호하고 사용자 역할을 관리하는 방법을 배웁니다.
단계 요약:
- 사용자 등록
- 비밀번호 해싱 및 저장
- 로그인 시 비밀번호 검증
- 서명된 JWT 생성
출처: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi