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

JWT란?

JWT(토큰)는 JSON Web Token의 약자로, 클라이언트와 서버 간의 인증을 위한 표준 방법 중 하나입니다. JWT는 토큰 내에 클레임(Claim) 정보를 포함하고 있으며, 이를 사용하여 사용자 인증 및 권한 부여 등을 수행합니다.

JWT 토큰 발급하기

아래의 파이썬 코드는 PyJWT 라이브러리를 사용하여 JWT 토큰을 발급하는 방법을 보여줍니다. 이 예시에서는 HS256 알고리즘을 사용하고, 시크릿 키를 통해 토큰을 서명합니다.

import jwt
import datetime

# 토큰 발급 함수
def issue_token(user_id):
    payload = {
        'user_id': user_id,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
    }
    jwt_token = jwt.encode(payload, 'secret_key', algorithm='HS256')
    return jwt_token

위의 코드에서 user_id는 사용자 식별자로, exp는 토큰의 만료 시간입니다. 발급된 토큰은 jwt_token 변수에 저장되며, 이를 클라이언트에게 전달할 수 있습니다.

JWT 토큰 검증하기

아래의 파이썬 코드는 PyJWT 라이브러리를 사용하여 JWT 토큰을 검증하는 방법을 보여줍니다. 이 예시에서는 HS256 알고리즘과 시크릿 키를 사용하여 토큰의 유효성을 확인합니다.

import jwt

# 토큰 검증 함수
def verify_token(jwt_token):
    try:
        payload = jwt.decode(jwt_token, 'secret_key', algorithms=['HS256'])
        return payload
    except jwt.ExpiredSignatureError:
        # 토큰이 만료되었을 경우 예외 처리
        return "Token expired"
    except jwt.InvalidTokenError:
        # 잘못된 토큰일 경우 예외 처리
        return "Invalid token"

위의 코드에서 jwt_token은 검증할 JWT 토큰입니다. jwt.decode() 함수를 사용하여 토큰을 복호화하고, 복호화된 정보를 반환합니다. 만약 토큰이 만료되었거나 유효하지 않은 경우에는 예외 처리하여 적절한 메시지를 반환할 수 있습니다.

JWT 토큰 로그 저장 및 제어

JWT 토큰 발급과 검증 시에는 로그를 저장하고 제어하는 것이 보안 및 추적성 측면에서 중요합니다. 아래의 코드는 로그 파일에 토큰 발급 및 검증 로그를 기록하는 예시입니다.

import logging

# 로거 설정
logging.basicConfig(filename='token.log', level=logging.INFO)

# 토큰 발급 함수
def issue_token(user_id):
    # 토큰 발급 코드 생략
    logging.info(f'Token issued for user {user_id}')
    return jwt_token

# 토큰 검증 함수
def verify_token(jwt_token):
    # 토큰 검증 코드 생략
    logging.info('Token verified')
    return payload

위의 코드에서 logging.basicConfig() 함수를 사용하여 로깅을 설정하고, logging.info() 함수를 사용하여 로그를 기록합니다. 발급 및 검증 로그는 token.log 파일에 기록되며, 필요에 따라 로거 설정을 조정할 수 있습니다.

마무리

위의 예시 코드를 참고하여 파이썬을 사용하여 JWT 토큰을 발급하고 검증하는 방법을 알아보았습니다. JWT 토큰의 로그 저장과 제어 가능성은 보안 및 추적성 측면에서 중요하므로, 필요에 따라 적절한 로그 기록과 예외 처리를 추가하여 안전한 JWT 토큰 시스템을 구축할 수 있습니다.

#JWT #파이썬