JWT를 활용한 파이썬 웹 애플리케이션의 토큰 만료 관리 방법

JWT(토큰)는 웹 애플리케이션에서 인증과 권한 부여를 관리하기 위해 널리 사용되는 대표적인 방법 중 하나입니다. 그러나 JWT는 토큰이 만료되지 않은 상태로 오랫동안 사용되는 것을 방지하기 위해 적절한 만료 시간 관리가 필요합니다. 이 글에서는 파이썬 웹 애플리케이션에서 JWT 토큰의 만료를 관리하는 방법을 알아보겠습니다.

토큰의 만료 시간 설정하기

JWT의 토큰은 기본적으로 만료 시간을 포함할 수 있도록 설계되어 있습니다. 토큰에는 “exp”라는 클레임(claim)이 포함되어 있으며, 이 클레임은 토큰의 만료 시간을 나타냅니다. 파이썬에서는 pyjwt 라이브러리를 사용하여 JWT 토큰을 생성하고 관리할 수 있습니다. 아래는 토큰의 만료 시간을 1시간으로 설정하는 예시 코드입니다.

import jwt
import datetime

# 토큰 만료 시간 설정
expiration_time = datetime.datetime.utcnow() + datetime.timedelta(hours=1)

# 토큰 생성
token = jwt.encode({'exp': expiration_time}, 'SECRET_KEY', algorithm='HS256')

위의 코드에서 expiration_time 변수를 datetime.timedelta()를 사용하여 현재 시간부터 1시간 후로 설정하였습니다. 그리고 jwt.encode() 함수를 사용하여 토큰을 생성하고, 토큰의 “exp” 클레임에 expiration_time 변수 값을 전달하였습니다. 이렇게 생성된 토큰은 만료 시간이 포함된 JWT가 됩니다.

토큰의 만료 여부 확인하기

파이썬 웹 애플리케이션에서 토큰을 사용할 때, 토큰의 만료 여부를 확인하는 것이 중요합니다. 만료된 토큰을 사용하면 보안상의 위험이 발생할 수 있으므로, 토큰이 만료되었는지를 항상 확인해야 합니다. 아래는 토큰의 만료 여부를 확인하는 예시 코드입니다.

import jwt

# 토큰 검증
try:
    token = 'SAMPLE_TOKEN'  # 예시로 사용할 토큰
    
    decoded_token = jwt.decode(token, 'SECRET_KEY', algorithms=['HS256'])
    expiration_time = decoded_token.get('exp')

    if expiration_time < datetime.datetime.utcnow():
        print("토큰이 만료되었습니다.")
    else:
        print("토큰이 유효합니다.")
except jwt.ExpiredSignatureError:
    print("토큰이 만료되었습니다.")
except jwt.InvalidTokenError:
    print("유효하지 않은 토큰입니다.")

위의 코드에서 jwt.decode() 함수를 사용하여 토큰의 유효성을 검증하고, 유효한 토큰인 경우 “exp” 클레임에서 만료 시간을 가져옵니다. 그리고 현재 시간과 비교하여 토큰이 만료되었는지를 확인합니다.

결론

JWT를 활용한 파이썬 웹 애플리케이션에서 토큰의 만료를 관리하는 방법에 대해 알아보았습니다. 토큰의 만료 시간을 설정하여 적절한 시점에 토큰이 만료되도록 관리하고, 토큰의 만료 여부를 항상 확인하는 것이 중요합니다. 이를 통해 보안과 인증 관리를 강화할 수 있습니다.

#JWT #토큰관리