파이썬 백엔드에서 JWT를 사용한 인증 시스템 만들기

개요

이번 글에서는 파이썬 백엔드에서 JWT(JSON Web Token)를 사용하여 인증 시스템을 만드는 방법에 대해 알아보겠습니다.

JWT란 무엇인가요?

JWT는 클레임(Claim) 기반의 인증 방식으로, 웹 애플리케이션 등에서 사용자 신원을 확인하고 인증하는 데 사용됩니다. JWT는 토큰 형태로 정보를 전달하고, 토큰에는 사용자의 정보와 만료 시간 등이 포함됩니다. 이러한 특징으로 인해 JWT는 분산 시스템에서 효과적으로 인증을 수행하는 데 사용됩니다.

JWT 사용을 위한 라이브러리 설치

JWT를 파이썬 백엔드에서 사용하기 위해서는 PyJWT 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install pyjwt

JWT를 사용한 인증 시스템 구현하기

  1. 먼저, JWT를 생성하기 위해 필요한 비밀키를 설정해야 합니다. 비밀키는 토큰을 암호화하고 검증하는 데 사용되므로, 반드시 안전한 곳에 저장되어야 합니다.
SECRET_KEY = 'your-secret-key'
  1. 로그인이 성공하면 JWT를 생성하여 클라이언트에게 전달해야 합니다. 다음은 로그인 API에서 JWT를 생성하는 예시입니다.
import jwt

def login(request):
    # 사용자 인증 로직 구현
    # ...

    # JWT 생성
    payload = {
        'user_id': user.id,
        'exp': datetime.utcnow() + timedelta(days=1)
    }
    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')

    return Response({'token': token})
  1. 클라이언트로부터 받은 JWT를 검증하여 사용자를 인증합니다. 다음은 인증 데코레이터에서 JWT를 검증하는 예시입니다.
from functools import wraps

def authenticate_request(func):
    @wraps(func)
    def wrapped(request, *args, **kwargs):
        token = request.headers.get('Authorization')

        try:
            payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
            user_id = payload.get('user_id')
            user = User.objects.get(id=user_id)
            request.user = user
        except:
            return Response({'error': 'Invalid token'}, status=401)

        return func(request, *args, **kwargs)

    return wrapped

마무리

이제 파이썬 백엔드에서 JWT를 사용하여 간단한 인증 시스템을 구현하는 방법을 알아보았습니다. JWT는 인증 기능뿐만 아니라 정보 전달 등 다양한 용도로 활용될 수 있으므로, 적절히 활용하여 보안성과 편의성을 높인 시스템을 개발할 수 있습니다.

#파이썬 #백엔드 #JWT #인증 #웹개발