데브허브 | DEVHUB | FastAPI - HTTP Basic Authentication demoFastAPI - HTTP Basic Authentication demo
- FastAPI 인증 시리즈의 첫 번째 영상으로, HTTP 기본 인증을 다루며 향후 토큰, API 키, OAuth2, OpenID Connect 등 다양한 인증 방식을 소개할 예정입니다. 🎬
- HTTP 기본 인증은 가장 간단한 인증 방식으로, 사용자 이름과 비밀번호를 HTTP 헤더에 포함하여 전송하며, 서버는 인증되지 않은 요청에 대해 401 Unauthorized 응답을 반환합니다. 🔑
- 인증 흐름은 클라이언트 요청 시 서버가 401 응답과
WWW-Authenticate: Basic 헤더를 보내면, 클라이언트가 Authorization: Basic <base64_encoded_credentials> 헤더를 포함하여 재요청하는 방식입니다. 🔄
- 이 방식은 데이터베이스에 사용자 정보를 저장하지 않고 특정 리소스에 대한 기본적인 보안을 제공할 때 유용할 수 있습니다. 🛡️
- 중요 보안 경고: 사용자 이름과 비밀번호가 평문(Base64 인코딩은 암호화가 아님)으로 전송되므로, 원격 환경에서는 반드시 HTTPS/TLS와 함께 사용해야 합니다. 🚨
- FastAPI에서 HTTP 기본 인증을 구현하려면
fastapi.security 모듈의 HTTPBasic과 HTTPBasicCredentials를 사용하고, Depends를 통해 경로 함수에 주입하여 인증 정보를 얻습니다. 💻
- 인증 로직은 주입된
credentials 객체의 username과 password를 검증하고, 실패 시 HTTPException (401 Unauthorized)을 발생시켜 클라이언트에게 재인증을 요청합니다. 🚫
- 비밀번호를 평문으로 저장하는 것은 매우 위험하므로, BCrypt와 같은 해싱 알고리즘을 사용하여 비밀번호를 해싱하고 저장해야 합니다. 🔒
- BCrypt를 사용하여 비밀번호를 해싱할 때는
bcrypt.hashpw() 함수에 바이트 형태의 비밀번호와 bcrypt.gensalt()로 생성된 솔트를 함께 전달합니다. 🧂