파이썬 Flask 프레임워크를 사용한 JWT 인증 구현 방법

소개

JSON Web Token (JWT)은 웹 애플리케이션에서 사용되는 토큰 기반의 인증 방식입니다. 이 방식은 서버와 클라이언트 간의 정보를 안전하게 전달하기 위해 사용됩니다. 파이썬 Flask 프레임워크를 사용하면 간단하게 JWT 인증을 구현할 수 있습니다.

필요한 패키지 설치

아래 명령어를 사용하여 필요한 패키지를 설치합니다.

pip install flask flask-jwt

Flask 애플리케이션 설정

Flask 애플리케이션을 생성하고 JWT 설정을 추가합니다.

from flask import Flask, jsonify, request
from flask_jwt import JWT, jwt_required

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
app.config['JWT_EXPIRATION_DELTA'] = timedelta(hours=1)

def authenticate(username, password):
    # 인증 로직 구현
    pass

def identity(payload):
    # 사용자 정보 조회 로직 구현
    pass

jwt = JWT(app, authenticate, identity)

사용자 로그인 엔드포인트 생성

아래 코드를 사용하여 사용자 로그인을 처리하는 엔드포인트를 생성합니다.

@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username')
    password = request.json.get('password')
    
    if not username or not password:
        return jsonify({'error': 'Missing username or password'}), 400
    
    # 인증
    user = authenticate(username, password)
    
    if user:
        # JWT 토큰 생성
        token = jwt.jwt_encode_callback(user)
        return jsonify({'token': token.decode('utf-8')})
    
    return jsonify({'error': 'Invalid credentials'}), 401

인증이 필요한 엔드포인트 생성

아래 코드를 사용하여 인증이 필요한 엔드포인트를 생성합니다. @jwt_required 데코레이터를 사용하여 인증을 필요로 함을 표시합니다.

@app.route('/protected')
@jwt_required()
def protected():
    # 인증이 필요한 로직
    pass

테스트

Postman 등의 도구를 사용하여 로그인과 인증이 필요한 엔드포인트를 테스트합니다.

  1. 로그인 엔드포인트에 유효한 사용자 정보를 전송하여 JWT 토큰을 받습니다.
  2. 받은 JWT 토큰을 인증이 필요한 엔드포인트의 Header에 Authorization 키로 설정하여 요청합니다.

마무리

이제 Flask를 사용하여 간단하게 JWT 인증을 구현했습니다. 보안에 예민한 정보를 다루는 웹 애플리케이션을 개발할 때는 적절한 보안 조치를 취하고 JWT의 유효 기간 등을 설정하는 등의 추가적인 작업이 필요할 수 있습니다.

#파이썬 #Flask #JWT #인증 #프레임워크