파이썬을 사용한 JWT 토큰 발급 및 검증 로그 저장 방법

개요

JWT( JSON Web Token)는 웹 통신을 위한 간단한 방식의 토큰 기술입니다. 이 글에서는 파이썬을 사용하여 JWT 토큰을 발급 및 검증하는 방법과 해당 작업의 로그를 저장하는 방법에 대해 알아보겠습니다.

JWT 토큰 발급

JWT 토큰을 발급하려면 pyjwt 라이브러리를 사용해야 합니다. 이 라이브러리를 설치하기 위해 다음 명령을 실행합니다:

pip install pyjwt
import jwt
import datetime

def generate_token(payload, secret_key):
    # 현재 시간
    now = datetime.datetime.utcnow()
    # 만료 시간 설정 (1시간 후)
    expiration = now + datetime.timedelta(hours=1)
    # JWT 토큰 생성
    token = jwt.encode({
        'exp': expiration,
        'payload': payload
    }, secret_key, algorithm='HS256')
    
    return token

위의 코드는 generate_token 함수를 통해 JWT 토큰을 생성하는 예제입니다. payload는 토큰에 담을 데이터를 의미하며, secret_key는 토큰을 서명하는데 사용되는 비밀 키입니다. 토큰은 만료 시간을 가지며, 유효 시간이 지난 토큰은 검증되지 않습니다.

JWT 토큰 검증

검증 과정에서는 토큰의 서명을 확인해야 합니다. 아래는 JWT 토큰을 검증하는 함수입니다.

def verify_token(token, secret_key):
    try:
        # 토큰 검증
        decoded_token = jwt.decode(
            token, secret_key, algorithms=['HS256']
        )
        # 유효한 토큰인 경우 페이로드 반환
        return decoded_token['payload']
    except jwt.ExpiredSignatureError:
        # 만료된 토큰인 경우
        print("토큰이 만료되었습니다.")
        return False
    except jwt.InvalidTokenError:
        # 잘못된 형식의 토큰인 경우
        print("잘못된 토큰입니다.")
        return False

위의 코드는 verify_token 함수를 통해 JWT 토큰의 유효성을 검사하고, 만료된 토큰이거나 잘못된 형식의 토큰인 경우에는 False를 반환합니다.

로그 저장

JWT 토큰 발급 및 검증 작업의 로그를 저장하기 위해 로깅 라이브러리를 사용할 수 있습니다. 여기서는 logging 모듈을 활용한 예제를 보여드리겠습니다.

import logging

# 로깅 설정
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    filename='jwt_logs.log',
    filemode='a'
)

def log_info(message):
    logging.info(message)

def log_error(message):
    logging.error(message)

위의 코드는 파일(jwt_logs.log)로 로그를 저장하기 위한 설정과 log_info, log_error 함수를 정의하는 예제입니다. 이렇게 설정된 로깅은 발급 및 검증 작업 중에 발생하는 정보 및 오류를 저장합니다.

결론

이 글에서는 파이썬을 사용하여 JWT 토큰을 발급 및 검증하는 방법과 로그를 저장하는 방법에 대해 알아보았습니다. JWT 토큰은 인증 및 권한 부여와 같은 웹 애플리케이션 보안에 널리 사용되는 도구입니다. 이를 통해 안전하고 신뢰할 수 있는 통신을 구축할 수 있습니다.