[python] Flask-RESTful에서 파일 다운로드에 대한 인증 설정 방법

Flask-RESTful은 Python으로 작성된 웹 응용 프로그램을 빠르고 쉽게 개발할 수 있는 프레임워크입니다. 이 프레임워크를 사용하여 파일 다운로드 기능을 개발할 때, 인증 설정을 추가하여 보안성을 높일 수 있습니다. 이번 블로그 포스트에서는 Flask-RESTful에서 파일 다운로드에 대한 인증 설정 방법에 대해 알아보겠습니다.

인증 설정을 위한 확장 모듈 설치하기

먼저, Flask-RESTful에서 인증을 위한 확장 모듈을 설치해야 합니다. 가장 인기 있는 확장 모듈 중 하나인 Flask-JWT를 사용하도록 하겠습니다. 아래의 명령어를 사용하여 Flask-JWT를 설치합니다.

pip install flask-jwt

인증 토큰 생성하기

인증을 위해서는 클라이언트에게 인증 토큰을 발급해야 합니다. Flask-JWT는 JWT(JSON Web Token)를 사용하여 토큰을 생성하고 검증할 수 있습니다. 다음은 Flask-JWT를 사용하여 인증 토큰을 생성하는 예시 코드입니다.

from flask import Flask
from flask_jwt_extended import JWTManager, create_access_token

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your-secret-key'  # 암호화 키 설정
jwt = JWTManager(app)

@app.route('/login', methods=['POST'])
def login():
    # 사용자 인증 로직 (e.g. 아이디/비밀번호 확인)
    
    access_token = create_access_token(identity=user_id)
    return jsonify(access_token=access_token), 200

위 코드에서 your-secret-key는 실제로 사용하려는 비밀 키로 대체되어야 합니다. 또한, create_access_token() 함수를 호출하여 토큰을 생성하고 클라이언트에게 반환합니다.

파일 다운로드 엔드포인트 추가하기

이제 파일 다운로드를 처리하는 엔드포인트를 추가해야 합니다. 아래의 예시 코드는 인증된 사용자만 파일 다운로드를 할 수 있도록 하는 엔드포인트를 구현한 것입니다.

from flask import Flask, send_from_directory
from flask_jwt_extended import jwt_required, get_jwt

app = Flask(__name__)

@app.route('/download/<filename>', methods=['GET'])
@jwt_required()
def download_file(filename):
    # 클라이언트에게 다운로드할 파일 제공
    return send_from_directory('path/to/files', filename)

위 코드에서 jwt_required() 데코레이터는 해당 엔드포인트가 인증이 필요하다는 것을 나타냅니다. 인증 토큰이 올바르게 전달되지 않으면 클라이언트는 401 Unauthorized 응답을 받게 됩니다.

결론

이번 포스트에서는 Flask-RESTful에서 파일 다운로드에 대한 인증 설정 방법을 알아보았습니다. Flask-JWT를 사용하여 인증 토큰을 생성하고, 엔드포인트에 인증을 추가하여 보안성을 강화할 수 있습니다. 더 많은 기능을 활용하려면 Flask-JWT의 공식 문서를 참조하세요.


참고 링크: