파이썬 Flask를 사용하여 JWT 토큰 기반의 로그인 기능 구현 방법

Flask는 파이썬 기반의 마이크로 웹 프레임워크로서, 간단하고 가볍게 웹 애플리케이션을 개발할 수 있습니다. 이번 포스트에서는 Flask를 사용하여 JWT(Token) 기반의 로그인 기능을 구현하는 방법에 대해서 알아보겠습니다.

1. JWT(Token)에 대한 이해

JWT(Token)은 JSON Web Token의 약어로, 인증과 정보 교환을 위해 사용되는 토큰 방식입니다. 이 토큰은 서버와 클라이언트 간에 정보를 안전하게 전달하고 인증하는 데 사용됩니다. JWT는 토큰 자체에 사용자 정보와 지정된 기간이 포함되어 있으며, 서버는 이러한 토큰을 사용하여 클라이언트의 신원을 인증합니다.

2. Flask 및 JWT 설치하기

Flask와 JWT를 사용하기 위해 먼저 해당 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다:

pip install flask
pip install pyjwt

3. Flask 애플리케이션 설정

다음은 Flask 애플리케이션 설정 단계입니다. 먼저 app.py라는 파일을 생성하고 다음 코드를 작성합니다:

from flask import Flask, jsonify, request
import jwt

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'  # JWT 암호화에 사용될 시크릿 키

@app.route('/login', methods=['POST'])
def login():
    # 로그인 요청을 받아 유효성을 검사하고 토큰을 발행하는 메소드
    username = request.json.get('username')
    password = request.json.get('password')

    # 실제로는 데이터베이스나 인증 서비스와 연동하여 유효성을 검사하는 로직을 작성해야 함

    if username == 'admin' and password == 'password':
        # 유효한 사용자인 경우 JWT 토큰 발행
        token = jwt.encode({'username': username}, app.config['SECRET_KEY'])
        return jsonify({'token': token})

    return jsonify({'error': 'Invalid username or password'}), 401  # 인증 오류 응답

4. 테스트 및 실행

Flask 애플리케이션을 실행하고 토큰 생성에 성공했는지 테스트해봅시다. 터미널에서 다음 명령을 사용하여 애플리케이션을 실행합니다:

export FLASK_APP=app.py
export FLASK_ENV=development
flask run

Postman 등의 API 테스트 도구를 사용하여 POST /login 엔드포인트에 다음과 같은 요청을 보냅니다:

{
    "username": "admin",
    "password": "password"
}

정상적인 응답이 돌아오면, 다음과 같이 토큰이 반환될 것입니다:

{
    "token": "your-generated-token"
}

이제 클라이언트는 이 토큰을 사용하여 인증된 요청을 보낼 수 있습니다.

마무리

이 포스트에서는 Flask를 사용하여 JWT(Token) 기반의 로그인 기능을 구현하는 방법에 대해 알아보았습니다. Flask와 JWT를 사용하여 보안성 있는 로그인 기능을 손쉽게 구현할 수 있습니다. 추가로 사용자 정보의 유효성 검증이나 토큰의 유효기간 설정 등 필요한 부분을 개발에 맞게 구현해보세요.

#python #flask #jwt