파이썬을 사용한 JWT 토큰 만료 처리 방법과 로깅 방법

JWT( Json Web Token)은 웹 애플리케이션에서 인증과 권한 부여를 처리하는 데에 사용되는 토큰입니다. 이 토큰은 특정 시간이 지나면 만료되도록 설정할 수 있고, 만료된 토큰은 더 이상 유효하지 않은 것으로 간주됩니다.

JWT 토큰 만료 처리 방법

JWT 토큰의 만료 기능을 구현하려면 다음과 같은 단계를 따를 수 있습니다:

  1. JWT 토큰 생성 시, 토큰에 만료 시간(expiration time)을 포함시킵니다. 예를 들어, payload에 exp라는 키를 추가하고 그 값으로 유효한 시간을 입력합니다.

    import jwt
    import datetime
    
    # 만료 시간 설정
    payload = {
        'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30),
        # 추가적인 페이로드 정보...
    }
       
    token = jwt.encode(payload, 'secret_key', algorithm='HS256')
    
  2. JWT 토큰이 검증될 때, 토큰의 만료 시간이 현재 시간보다 이전인지 확인합니다.

    import jwt
    import datetime
    
    try:
        # 토큰 검증
        payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
           
        # 만료 시간 확인
        if datetime.datetime.utcnow() > datetime.datetime.fromtimestamp(payload['exp']):
            # 토큰 만료
            return False
           
        # 토큰 유효
        return True
    
    except jwt.ExpiredSignatureError:
        # 토큰 만료
        return False
    
    except jwt.InvalidTokenError:
        # 토큰 검증 실패 등의 이유로 토큰이 올바르지 않음
        return False
    

위의 예시에서 jwt 모듈은 PyJWT 라이브러리를 의미합니다. 이 라이브러리를 사용하면 JWT 토큰을 쉽게 생성하고 검증할 수 있습니다.

JWT 토큰 로깅 방법

로그는 애플리케이션의 동작과 문제를 파악하는 데에 매우 중요한 도구입니다. JWT 토큰 관련 로깅을 구현하기 위해 다음과 같은 방법을 사용할 수 있습니다:

  1. 토큰 생성 시 로깅: JWT 토큰 생성 시, 생성된 토큰을 로그로 남깁니다. 이를 통해 어떤 사용자가 언제 토큰을 생성했는지 추적할 수 있습니다.

    import logging
    
    token = jwt.encode(payload, 'secret_key', algorithm='HS256')
    
    logger = logging.getLogger('jwt_token')
    logger.info(f'Token generated for user: {user_id}')
    
  2. 토큰 검증 시 로깅: JWT 토큰을 검증할 때, 검증이 성공했는지 여부를 로그로 남깁니다.

    import logging
    
    try:
        # 토큰 검증
    
        logger = logging.getLogger('jwt_token')
        logger.info(f'Token validated for user: {user_id}')
    
    except jwt.ExpiredSignatureError:
        # 토큰 만료
    
        logger = logging.getLogger('jwt_token')
        logger.error(f'Token expired for user: {user_id}')
    
    except jwt.InvalidTokenError:
        # 토큰 검증 실패 등의 이유로 토큰이 올바르지 않음
    
        logger = logging.getLogger('jwt_token')
        logger.error(f'Token validation failed for user: {user_id}')
    

위의 예시에서는 logging 모듈을 사용하여 로그를 기록하였습니다.

이와 같이 JWT 토큰의 만료 처리와 로깅을 함께 구현함으로써, 보다 안전하고 추적 가능한 웹 애플리케이션을 구현할 수 있습니다.

#jwt #token #expiration #logging