소개
이번 블로그 포스트에서는 파이썬 Flask 프레임워크를 사용하여 JWT(Json Web Token) 토큰 기반의 리소스 접근 제어를 구현하는 방법에 대해 알아보겠습니다. JWT는 웹 애플리케이션에서 사용자 인증을 처리하고, 인증된 사용자에게 특정 리소스에 접근할 때 사용하는 토큰입니다.
선행 작업
이 예제를 따라하기 위해서는 다음과 같은 패키지들을 설치해야 합니다.
pip install flask flask_jwt_extended
Flask 애플리케이션 설정
Flask 애플리케이션을 만들고 JWT 기능을 활성화시키기 위해 다음과 같이 설정해야 합니다.
from flask import Flask
from flask_jwt_extended import JWTManager
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # JWT 시크릿 키 설정
jwt = JWTManager(app)
위의 예제에서는 Flask 앱 인스턴스를 생성하고, ‘JWT_SECRET_KEY’ 설정을 통해 JWT 시크릿 키를 설정하고 있습니다. 이 시크릿 키는 서버와 클라이언트 사이에서 토큰을 암호화 및 복호화할 때 사용되는 중요한 값입니다.
JWT 토큰 생성 및 검증
JWT를 사용하여 토큰을 생성하고 검증하는 방법은 다음과 같습니다.
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
# 사용자 인증 로직
if username != 'admin' or password != 'password':
return jsonify(msg='인증 실패'), 401 # 인증 실패 시 401 에러 반환
access_token = create_access_token(identity=username) # 토큰 생성
return jsonify(access_token=access_token)
@app.route('/protected', methods=['GET'])
@jwt_required() # JWT 토큰 필요
def protected():
username = get_jwt_identity() # 토큰에서 사용자 식별자 추출
return jsonify(msg=f'{username} 님, 인증 성공')
위의 예제에서는 ‘/login’ 엔드포인트를 통해 사용자 인증을 처리하고, 인증에 성공하면 JWT 토큰을 생성하여 반환합니다. 인증이 필요한 ‘/protected’ 엔드포인트는 @jwt_required()
데코레이터를 사용하여 인증된 사용자만 접근할 수 있도록 설정합니다. 토큰에서 사용자 식별자는 get_jwt_identity()
함수를 통해 추출할 수 있습니다.
결론
이렇게 Flask와 JWT를 함께 사용하여 토큰 기반의 리소스 접근 제어를 구현할 수 있습니다. 이를 통해 사용자 인증을 간편하게 처리하고, 보안성을 높일 수 있습니다. Flask와 JWT를 이용하여 안전하고 신뢰성 높은 웹 애플리케이션을 개발해보세요!