파이썬을 사용하여 JWT 토큰 갱신 시스템 만들기

개요

JWT (JSON Web Token)은 웹 애플리케이션에서 사용되는 인증 방식 중 하나입니다. 일반적으로 JWT 토큰은 사용자의 인증 상태를 저장하고, 클라이언트로부터 받은 요청에 대한 인증을 처리하는 데 사용됩니다. 이 튜토리얼에서는 파이썬을 사용하여 JWT 토큰 갱신 시스템을 만드는 방법을 알아보겠습니다.

JWT 토큰 갱신 시스템 설계

  1. 사용자가 로그인하는 경우 서버에서 JWT 토큰을 발급합니다.
  2. JWT 토큰은 클라이언트에 저장되고, 요청 시 HTTP 헤더에 포함되어 전송됩니다.
  3. JWT 토큰의 유효기간이 만료되기 전에 클라이언트는 토큰을 갱신해야 합니다.
  4. 클라이언트는 갱신 요청 시 유효한 JWT 토큰과 함께 서버에 요청을 보냅니다.
  5. 서버는 받은 토큰이 유효하고 만료되지 않았다면 새로운 토큰을 발급하여 응답합니다.

파이썬을 사용하여 JWT 토큰 갱신 구현하기

아래는 파이썬에서 JWT 토큰 갱신 시스템을 구현하는 예제 코드입니다.

import jwt
import datetime
from flask import Flask, request, jsonify
from functools import wraps

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'  # 비밀 키 설정
app.config['JWT_EXPIRATION_DELTA'] = datetime.timedelta(minutes=30)  # 토큰 유효 시간 설정

def token_required(func):
    @wraps(func)
    def decorated(*args, **kwargs):
        token = request.headers.get('Authorization')
        if not token:
            return jsonify({'message': '토큰이 필요합니다.'}), 401
        
        try:
            data = jwt.decode(token, app.config['SECRET_KEY'])
        except jwt.ExpiredSignatureError:
            return jsonify({'message': '토큰이 만료되었습니다.'}), 401
        except:
            return jsonify({'message': '유효하지 않은 토큰입니다.'}), 401
        
        return func(*args, **kwargs)
    return decorated

@app.route('/login', methods=['POST'])
def login():
    # 로그인 로직 구현
    # 로그인 성공 시 JWT 토큰 발급
    
@app.route('/refresh_token', methods=['POST'])
@token_required
def refresh_token():
    current_token = request.headers.get('Authorization')
    try:
        data = jwt.decode(current_token, app.config['SECRET_KEY'])
    except jwt.ExpiredSignatureError:
        return jsonify({'message': '토큰이 이미 만료되었습니다.'}), 401
    except:
        return jsonify({'message': '유효하지 않은 토큰입니다.'}), 401
    
    # 새로운 토큰 발급 및 응답
    

위 코드는 Flask 프레임워크를 사용하여 토큰 갱신 시스템을 구현한 예제입니다. @token_required 데코레이터 함수는 클라이언트의 요청이 유효한 토큰을 포함하는지 확인합니다. refresh_token 엔드포인트는 토큰 갱신 요청을 처리하며, 유효한 토큰이라면 새로운 토큰을 발급하여 응답합니다.

이제 위 예제 코드를 참고하여 웹 애플리케이션에 JWT 토큰 갱신 시스템을 구현해보세요!

#JWT #파이썬 #웹개발