JWT를 활용한 파이썬 웹 애플리케이션의 인증 세션 관리 방법

개요

인증 세션 관리는 웹 애플리케이션에서 중요한 부분입니다. JWT(JSON Web Token)는 세션 인증 정보를 안전하게 전달하고 검증하기 위한 표준 방법 중 하나입니다. 이 글에서는 파이썬 웹 애플리케이션에서 JWT를 활용하여 인증 세션을 관리하는 방법에 대해 알아보겠습니다.

JWT란?

JWT는 토큰 기반 인증 방식 중 하나로, 세션 정보를 JSON 형식으로 인코딩하여 토큰으로 생성합니다. 토큰은 클라이언트에게 전달되어 인증 요청 시 사용됩니다. 토큰은 서명되어 있어 변조될 수 없고, 클라이언트에서 직접 디코딩하여 인증 정보를 얻을 수 있습니다.

JWT 인증 세션 관리 방법

1. JWT 생성

인증이 필요한 경우, 서버는 JWT를 생성하여 클라이언트에게 반환합니다. JWT는 ‘header.payload.signature’ 형식으로 구성되며, 각 부분은 Base64로 인코딩되어 있습니다. ‘header’에는 알고리즘과 토큰 유형이, ‘payload’에는 클라이언트 정보와 유효 기간 등의 데이터가 포함되고, ‘signature’에는 서버의 비밀키로 서명된 데이터가 저장됩니다.

예시 코드:

import jwt
import datetime

payload = {
    'user_id': 123,
    'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}
secret_key = 'my_secret_key'

token = jwt.encode(payload, secret_key, algorithm='HS256')

2. JWT 유효성 검증

클라이언트가 요청을 보낼 때, 서버는 JWT의 유효성을 검증해야 합니다. 이를 위해 서버는 JWT를 디코딩하여 페이로드의 정보와 만료 시간을 확인합니다.

예시 코드:

import jwt

token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsImV4cCI6MTYzMTkzNDEyNH0.suo9qOjaJjB3Fp7riG7R9speJ0vvKpLSN_HEglgblCM'
secret_key = 'my_secret_key'

try:
    payload = jwt.decode(token, secret_key, algorithms=['HS256'])
    print(payload)  # 인증 정보 출력
except jwt.ExpiredSignatureError:
    print("토큰이 만료되었습니다.")
except jwt.InvalidTokenError:
    print("유효하지 않은 토큰입니다.")

3. JWT 갱신

JWT는 유효 기간이 있다는 점에서 일부 제약이 있습니다. 따라서, 인증이 필요한 요청마다 새로운 JWT를 생성하는 것은 비효율적입니다. 대신, 클라이언트는 서버로 JWT를 전송하고, 서버는 유효한 JWT이면 갱신된 JWT를 반환하도록 구현할 수 있습니다.

예시 코드:

import jwt
import datetime

def refresh_token(token):
    try:
        payload = jwt.decode(token, secret_key, algorithms=['HS256'])
        new_token = jwt.encode({'user_id': payload['user_id']}, secret_key, algorithm='HS256')
        return new_token
    except jwt.ExpiredSignatureError:
        print("토큰이 만료되었습니다.")
    except jwt.InvalidTokenError:
        print("유효하지 않은 토큰입니다.")

token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsImV4cCI6MTYzMTkzNDEyNH0.suo9qOjaJjB3Fp7riG7R9speJ0vvKpLSN_HEglgblCM'
new_token = refresh_token(token)

print(new_token)

결론

JWT를 활용하여 파이썬 웹 애플리케이션의 인증 세션을 관리하는 방법에 대해 알아보았습니다. JWT를 사용하면 세션 정보를 안전하게 전달하고 검증할 수 있으며, 갱신된 토큰을 사용하여 효율적으로 인증 세션을 관리할 수 있습니다.

#JWT #파이썬 #웹애플리케이션 #인증 #세션