인증은 웹 애플리케이션에서 사용자의 신원을 확인하고 보호된 리소스에 접근을 제한하는 중요한 부분입니다. FastAPI는 OAuth2 인증을 구현하기 위해 fastapi.security
모듈을 제공합니다. 이 모듈을 사용하면 간단하게 OAuth2 서비스를 통해 사용자를 인증하고 액세스 토큰을 발급받을 수 있습니다.
1. 의존성 설치하기
OAuth2 인증을 사용하기 위해 fastapi
외에도 몇 가지 패키지가 필요합니다. 다음 명령을 사용하여 필요한 패키지를 설치하세요.
pip install python-jose[cryptography] python-multipart requests_oauthlib
2. 프로바이더 설정하기
from fastapi import FastAPI
from fastapi.security import OAuth2PasswordBearer
from fastapi.security.oauth2 import OAuth2PasswordRequestForm
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
OAuth2PasswordBearer
클래스를 사용하여 OAuth2 액세스 토큰을 검증하는 방법을 설정합니다. tokenUrl
매개변수에는 토큰을 발급 받을 엔드포인트의 경로를 지정합니다.
3. 인증 경로 만들기
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = authenticate_user(form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token = create_access_token(data={"sub": user.username})
return {"access_token": access_token, "token_type": "bearer"}
위의 코드는 /token
경로에서 사용자를 인증하고 액세스 토큰을 발행하는 엔드포인트입니다. OAuth2PasswordRequestForm
클래스를 사용하여 사용자명과 비밀번호를 받습니다. authenticate_user
함수를 호출하여 사용자를 인증하고, 인증에 실패한 경우 HTTPException
을 발생시킵니다. 인증에 성공하면 create_access_token
함수를 사용하여 액세스 토큰을 발급합니다.
4. 보호된 엔드포인트 만들기
from fastapi import Depends, HTTPException, status
@app.get("/protected")
async def protected_route(token: str = Depends(oauth2_scheme)):
user = get_user_from_token(token)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication token",
headers={"WWW-Authenticate": "Bearer"},
)
return {"message": "Hello, authenticated user!"}
위의 코드는 /protected
경로로 접근할 때 액세스 토큰을 검증하는 엔드포인트입니다. Depends(oauth2_scheme)
매개변수를 사용하여 액세스 토큰을 인증하고, 인증에 실패한 경우 HTTPException
을 발생시킵니다. 인증에 성공했다면 인증된 사용자에게 인사하는 메시지를 반환합니다.
결론
FastAPI의 fastapi.security
모듈을 사용하면 간단하게 OAuth2 인증을 구현할 수 있습니다. 이를 통해 보안성을 향상시키고, 사용자의 신원을 확인하여 보호된 리소스에 접근을 제한할 수 있습니다.
더 많은 정보를 원하시면 FastAPI 공식 문서를 참조하십시오.