파이썬 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 등의 도구를 사용하여 로그인과 인증이 필요한 엔드포인트를 테스트합니다.
- 로그인 엔드포인트에 유효한 사용자 정보를 전송하여 JWT 토큰을 받습니다.
- 받은 JWT 토큰을 인증이 필요한 엔드포인트의 Header에
Authorization
키로 설정하여 요청합니다.
마무리
이제 Flask를 사용하여 간단하게 JWT 인증을 구현했습니다. 보안에 예민한 정보를 다루는 웹 애플리케이션을 개발할 때는 적절한 보안 조치를 취하고 JWT의 유효 기간 등을 설정하는 등의 추가적인 작업이 필요할 수 있습니다.