파이썬 FastAPI와 JWT를 활용한 프론트엔드 및 백엔드 간 안전한 데이터 전송 방법

이제는 웹 애플리케이션에서 더 안전한 방법으로 데이터를 전송해야 할 필요가 있습니다. 이를 위해 파이썬의 FastAPI와 JWT(Json Web Token)를 사용하여 프론트엔드 및 백엔드 간 안전한 데이터 전송 방법을 구현할 수 있습니다. JWT는 암호화된 토큰을 사용하여 사용자 인증 및 데이터 무결성을 보장합니다.

FastAPI 소개

FastAPI는 빠르고(실행 시 성능 최적화), 간편하며(선언적인 기능) Python 3.7+를 위한 웹 프레임워크입니다. FastAPI는 장고와 플라스크보다 성능이 우수하며, 타입 힌트(type hint)를 사용하여 코드 중복을 줄이고 개발 속도를 향상시킵니다.

JWT 소개

JWT는 클레임(Claim)을 기반으로 한 토큰 기반 인증 방식입니다. 토큰은 서버에서 발급되며, 클라이언트는 이 토큰을 사용하여 인증을 진행합니다. 서버에서 토큰을 검증함으로써 사용자의 신원을 확인할 수 있습니다. JWT는 토큰의 유효성을 확인하기 위해 서명되므로 안전하게 데이터를 전송할 수 있습니다.

데이터 전송 방법

  1. 클라이언트에서 로그인 요청을 보냅니다.
  2. 서버에서 로그인 정보를 확인하고 유효한 경우 JWT를 발급합니다.
  3. 클라이언트는 JWT를 사용하여 보안된 API 엔드포인트에 요청을 보냅니다.
  4. 서버는 클라이언트에서 받은 JWT를 검증하고, 유효한 경우 요청을 처리하고 응답을 반환합니다.

FastAPI와 JWT로 구현하기

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel
from jose import JWTError, jwt

app = FastAPI()

class User(BaseModel):
    username: str
    password: str

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/login")

JWT_SECRET_KEY = "your-secret-key"

def authenticate_user(username: str, password: str):
    # 유저 인증 작업을 수행하는 코드 작성
    # 사용자가 올바른 인증 정보를 제공한지 확인

def create_access_token(data: dict, expires_delta: timedelta = timedelta(minutes=15)):
    to_encode = data.copy()
    expire = datetime.utcnow() + expires_delta
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, JWT_SECRET_KEY, algorithm="HS256")
    return encoded_jwt

@app.post("/login")
def login(user: User):
    if not authenticate_user(user.username, user.password):
        raise HTTPException(status_code=401, detail="Invalid username or password")
    access_token = create_access_token(data={"sub": user.username})
    return {"access_token": access_token, "token_type": "bearer"}

@app.get("/secure-data")
def secure_data(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=["HS256"])
        username = payload.get("sub")
        # 토큰의 유효성을 확인하고 사용자 데이터를 반환하는 작업을 수행하는 코드 작성
    except JWTError:
        raise HTTPException(status_code=401, detail="Invalid token")

위의 예제는 FastAPI와 JWT를 사용하여 안전한 데이터 전송 방법을 구현한 간단한 예시입니다. 클라이언트에서 로그인을 요청한 후 JWT를 받아온 후, 이를 사용하여 보안된 API 엔드포인트에 요청하여 데이터를 안전하게 전송할 수 있습니다.

이제 FastAPI와 JWT를 활용하여 프론트엔드 및 백엔드 간 안전한 데이터 전송 방법을 구현할 수 있습니다. 이를 통해 더욱 안전한 웹 애플리케이션을 개발할 수 있습니다.

#python #FastAPI #JWT