[python] FastAPI에 인증 및 권한 부여 구현하기
FastAPI는 Python으로 빠르게 API를 구축할 수 있는 강력한 프레임워크입니다. 이번 블로그 포스트에서는 FastAPI 애플리케이션에 인증과 권한 부여를 구현하는 방법에 대해 알아보겠습니다.
1. 사용자 모델 생성하기
FastAPI는 자체적인 인증 및 권한 부여 시스템을 제공하지 않기 때문에, 우선적으로 사용자 모델을 생성해야 합니다. 예를 들어, 다음과 같이 사용자 모델을 정의할 수 있습니다:
from pydantic import BaseModel
class User(BaseModel):
username: str
password: str
email: str
role: str
2. JWT (JSON Web Tokens)를 사용한 인증
FastAPI에서는 JWT를 사용하여 인증을 처리하는 것이 일반적입니다. 이를 위해서는 pyjwt
와 같은 JWT 라이브러리를 설치해야 합니다. 다음 예제는 JWT를 생성하고 검증하는 함수를 보여줍니다:
import jwt
def create_access_token(data: dict, secret_key: str, algorithm: str, expires_in: int):
encoded_jwt = jwt.encode(data, secret_key, algorithm=algorithm)
return encoded_jwt
def verify_access_token(token: str, secret_key: str, algorithm: str):
try:
decoded_jwt = jwt.decode(token, secret_key, algorithms=[algorithm])
return decoded_jwt
except jwt.JWTError:
return None
3. 인증 및 권한 부여 기능 구현하기
FastAPI의 라우터를 사용하여 인증 및 권한 부여 기능을 구현할 수 있습니다. 예를 들어, 다음과 같이 login
과 protected
라는 두 개의 엔드포인트를 생성할 수 있습니다:
from fastapi import FastAPI, HTTPException, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/login")
app = FastAPI()
@app.post("/login")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
# 사용자 인증 확인 로직 구현
# JWT 생성
access_token = create_access_token(
data={"username": form_data.username}, # 사용자 식별 정보
secret_key="supersecret", # 비밀 키
algorithm="HS256", # 알고리즘
expires_in=3600 # 토큰 유효 시간 (초)
)
return {"access_token": access_token, "token_type": "bearer"}
@app.get("/protected")
async def protected(token: str = Depends(oauth2_scheme)):
user = verify_access_token(token, "supersecret", "HS256")
if not user:
raise HTTPException(status_code=401, detail="Invalid token")
# 사용자 권한 확인 로직 구현
return {"message": "Protected endpoint"}
위 코드에서 /login
엔드포인트는 사용자 인증을 처리하고, JWT를 생성하여 응답으로 반환합니다. /protected
엔드포인트는 인가되지 않은 사용자로부터의 요청을 방지하기 위해 oauth2_scheme
을 사용하여 토큰을 검증합니다.
마치며
이번 포스트에서는 FastAPI에서 인증과 권한 부여를 구현하는 방법에 대해 알아보았습니다. FastAPI의 간결성과 빠른 속도를 활용하여 안전한 API를 개발할 수 있습니다.
더 자세한 내용과 예제 코드는 FastAPI 공식 문서를 참고해주세요.