파이썬 Flask를 활용한 JWT 토큰 인증을 이용한 웹 앱 보안 강화
개요
웹 애플리케이션에서 보안은 매우 중요합니다. 사용자 인증 및 권한 부여는 웹 앱의 보안성을 확보하는 핵심 기능 중 하나입니다. 이를 위해 JWT(JSON Web Token) 토큰 인증을 사용하여 웹 앱의 보안을 강화하는 방법을 알아보겠습니다. JWT는 클레임 기반의 인증 방식으로, 토큰 자체에 사용자 정보와 권한 정보를 담고 있어 서버에서 별도의 인증 저장소를 유지할 필요가 없습니다.
JWT 토큰 인증 절차
- 사용자가 웹 애플리케이션에 로그인합니다.
- 서버는 로그인 정보를 확인하고 유효한 경우, 사용자 정보를 기반으로 JWT 토큰을 생성합니다.
- 서버는 생성된 JWT 토큰을 사용자에게 반환합니다.
- 사용자는 이후 요청에 JWT 토큰을 포함시켜 서버에 전송합니다.
- 서버는 받은 JWT 토큰을 검증하고 유효한 경우, 요청을 처리합니다.
Flask를 이용한 JWT 토큰 인증 구현
Flask 웹 프레임워크를 사용하여 JWT 토큰 인증을 구현하는 방법을 알아보겠습니다.
먼저, Flask와 필요한 패키지를 설치합니다. 다음 명령을 사용합니다.
pip install flask flask_jwt_extended
다음 예제 코드는 Flask 웹 앱에서 JWT 토큰 인증을 구현하는 간단한 예시입니다.
from flask import Flask
from flask_jwt_extended import JWTManager
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
app = Flask(__name__)
# 설정
app.config['JWT_SECRET_KEY'] = 'secret-key'
jwt = JWTManager(app)
# 로그인 라우트
@app.route('/login', methods=['POST'])
def login():
# 사용자 인증 로직
user = get_user_from_database()
if user and verify_password(user.password, request.form['password']):
# JWT 토큰 생성
access_token = create_access_token(identity=user.id)
# 토큰 반환
return {'access_token': access_token}, 200
return {'message': 'Invalid credentials'}, 401
# 보호된 라우트
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
current_user = get_jwt_identity()
return {'message': f'Protected route for user: {current_user}'}
if __name__ == '__main__':
app.run()
위 코드에서는 /login
엔드포인트에서 사용자 인증을 처리하고, 유효한 경우에만 JWT 토큰을 생성하여 반환합니다. /protected
엔드포인트는 @jwt_required()
데코레이터로 보호되며, 유효한 JWT 토큰을 가지고 있는 사용자만 접근할 수 있습니다.
마무리
Flask를 활용한 JWT 토큰 인증을 통해 웹 앱의 보안을 강화할 수 있습니다. JWT를 사용하면 별도의 인증 저장소를 구축하지 않아도 되며, 클라이언트에서 전송할 필요가 있는 토큰만을 사용하여 보안을 유지할 수 있습니다. 안전한 웹 앱을 만들기 위해 JWT 토큰 인증을 고려해보세요.