[python] FastAPI에서 인증 토큰 처리하기

FastAPI는 Python으로 빠르고 현대적인 API를 손쉽게 작성할 수 있는 웹 프레임워크입니다. 이 프레임워크를 사용하면 효율적으로 RESTful API를 구축하고, 인증 및 권한 부여 시스템을 손쉽게 통합할 수 있습니다. 이번 포스트에서는 FastAPI에서 사용자의 인증 토큰을 처리하는 방법에 대해 알아보겠습니다.

1. JWT (JSON Web Tokens) 소개

JWT(https://jwt.io/)는 JSON 형식으로 표현된 정보를 안전하게 전달하기 위한 토큰입니다. 이는 클라이언트와 서버 간의 인증에 사용되며, 특히 웹 애플리케이션에서 많이 활용됩니다. JWT는 Header, Payload, Signature의 3가지 부분으로 구성되어 있으며, 이들은 Base64로 인코딩되어 전송됩니다.

2. FastAPI에서 JWT 사용하기

FastAPI에서 JWT를 사용하기 위해서는 PyJWT 라이브러리를 설치해야 합니다. Shell에서 다음 명령을 실행하여 설치할 수 있습니다.

pip install PyJWT

다음으로 FastAPI 애플리케이션에서 JWT를 사용하려면 다음과 같이 라이브러리를 import하고, 토큰을 검증 및 생성할 수 있습니다.

import jwt
from fastapi import Depends, FastAPI, HTTPException
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

def verify_token(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, "secret_key", algorithms=["HS256"])
    except jwt.JWTError:
        raise HTTPException(status_code=401, detail="Invalid credentials")
    return payload

@app.get("/protected")
async def protected_route(current_user: dict = Depends(verify_token)):
    return {"message": "This is a protected route"}

위의 예제에서는 FastAPI의 OAuth2PasswordBearer 클래스를 사용하여 사용자의 토큰을 가져오고, PyJWT를 사용하여 토큰을 검증하고 payload를 추출하는 함수를 구현했습니다. 이로써 특정 route에 대한 접근 권한을 인증 토큰을 사용하여 제한할 수 있습니다.

3. 마치며

이로써 FastAPI에서 인증 토큰을 효과적으로 처리하는 방법을 알아보았습니다. JWT는 안전한 인증에 매우 효과적이며, FastAPI를 사용하여 간단하게 통합할 수 있습니다. 이를 통해 보안성이 높은 API를 구축할 수 있게 됩니다. FastAPI 공식 문서 및 PyJWT GitHub 페이지에서 더 자세한 정보를 확인할 수 있습니다.

참고 문헌