개요
JWT(Json Web Token)는 인증과 데이터 교환을 안전하게 수행하기 위한 방법 중 하나입니다. 토큰은 사용자를 인증하고 유효성을 검증하는 데 사용됩니다. 이 문서에서는 파이썬 Flask 프레임워크를 사용하여 JWT 토큰의 만료 처리 방법을 소개합니다.
JWT 토큰 만료 기능 추가하기
- Flask에서 JWT 토큰 만료 기능을 추가하기 위해
PyJWT
모듈을 설치합니다.pip install PyJWT
- Flask 애플리케이션에서 JWT 토큰 만료를 처리하기 위해 다음 코드를 추가합니다. ```python from datetime import datetime, timedelta import jwt
토큰 발행 시간과 만료 시간 설정
issued_at = datetime.utcnow() expiration = issued_at + timedelta(minutes=30)
토큰 생성 함수
def create_token(user_id): payload = { ‘user_id’: user_id, ‘exp’: expiration, ‘iat’: issued_at } token = jwt.encode(payload, ‘SECRET_KEY’, algorithm=’HS256’) return token
토큰 유효성 검증 함수
def verify_token(token): try: payload = jwt.decode(token, ‘SECRET_KEY’, algorithms=[‘HS256’]) return payload except jwt.ExpiredSignatureError: return {‘error’: ‘Token expired’} except jwt.InvalidTokenError: return {‘error’: ‘Invalid token’}
3. 토큰을 생성하는 부분에서 토큰의 만료 시간(`'exp'`)을 설정합니다. 상기 예제에서는 현재 시간으로부터 30분 후로 설정했습니다.
4. 토큰이 유효한지 검증하는 함수에서 만료된 토큰이나 잘못된 토큰을 처리하기 위해 `jwt.ExpiredSignatureError`와 `jwt.InvalidTokenError` 예외 처리를 추가합니다.
## JWT 토큰 만료 기능 테스트하기
1. Flask 애플리케이션에서 토큰 생성 및 검증 기능을 테스트하기 위해 다음 코드를 추가합니다.
```python
from flask import Flask, jsonify, request
app = Flask(__name__)
# 테스트용 유저 데이터
users = [
{'id': 1, 'name': 'Alice'},
{'id': 2, 'name': 'Bob'}
]
# 로그인 API
@app.route('/login', methods=['POST'])
def login():
user_id = request.get_json().get('user_id')
if user_id:
token = create_token(user_id)
return jsonify({'token': token}), 200
else:
return jsonify({'error': 'Invalid user_id'}), 400
# 리소스 접근 API
@app.route('/resource', methods=['GET'])
def get_resource():
token = request.headers.get('Authorization')
if token and 'Bearer' in token:
token = token.split(' ')[1]
payload = verify_token(token)
if 'error' in payload:
return jsonify(payload), 401
user_id = payload.get('user_id')
user = next((user for user in users if user['id'] == user_id), None)
if user:
return jsonify({'user': user}), 200
else:
return jsonify({'error': 'User not found'}), 404
else:
return jsonify({'error': 'Invalid token'}), 400
if __name__ == '__main__':
app.run()
-
위 코드에는 로그인 기능을 담은
/login
API와 접근 권한이 있는 리소스를 반환하는/resource
API가 포함되어 있습니다. -
/login
API를 호출하여 사용자 토큰을 얻습니다. 토큰은 응답에 포함됩니다. -
Bearer
토큰을Authorization
헤더에 포함하여/resource
API에 요청합니다. 유효한 토큰이 제공되면 해당 사용자의 리소스가 반환됩니다. -
만료된 토큰이나 잘못된 토큰을 사용하여
/resource
API에 요청하면 에러 메시지가 반환됩니다.
요약
이 문서에서는 파이썬 Flask 프레임워크를 사용하여 JWT 토큰의 만료 처리 방법을 소개했습니다. JWT 토큰을 생성하고 유효성을 검증할 수 있는 함수를 구현하며, 테스트용으로 간단한 로그인 및 리소스 접근 API를 만들어 토큰 만료 기능을 확인했습니다.
#JWT #토큰 #만료 #파이썬 #Flask