Flask-RESTful은 Flask 프레임워크를 기반으로 한 RESTful API 개발을 위한 도구이다. 이 도구를 사용하여 웹 애플리케이션을 만들 때, 인증과 권한 부여는 중요한 요소이다. Flask-RESTful은 다양한 방법으로 인증과 권한 부여를 구현할 수 있지만, 여기서는 기능 별 인증과 권한 부여 방법을 알아보고자 한다.
1. 사용자 인증
사용자 인증은 API에 접근하는 사용자의 신원을 확인하는 과정이다. Flask-RESTful에서 사용자 인증을 위해 일반적으로 flask-httpauth
라이브러리를 사용할 수 있다. 이 라이브러리는 다양한 인증 메커니즘을 지원하며, 가장 일반적인 메커니즘은 Basic 인증과 Token 인증이다.
- Basic 인증: 사용자는 요청 헤더에 자신의 사용자 이름과 비밀번호를 Base64로 인코딩하여 전송한다. 서버는 이를 확인하여 사용자를 인증한다.
- Token 인증: 사용자는 로그인 후 토큰을 발급받아 API 요청 헤더에 토큰을 포함하여 전송한다. 서버는 이를 확인하여 사용자를 인증한다.
2. 기능 별 권한 부여
API의 각 기능에는 특정한 권한이 필요할 수 있다. Flask-RESTful에서 기능 별 권한 부여를 구현하기 위해 flask_jwt_extended
라이브러리를 사용할 수 있다. 이 라이브러리는 JWT(Json Web Token)를 사용하여 사용자에게 접근 권한을 할당한다.
@jwt_required
데코레이터: 해당 데코레이터를 기능 핸들러 함수에 추가하면, 해당 기능에 접근하는 사용자는 반드시 JWT 인증이 필요하다.- 권한 레벨 설정: JWT 토큰에는 사용자의 권한 레벨 정보를 포함할 수 있다. 기능 핸들러 함수에서는 이 정보를 사용하여 해당 기능에 대한 권한 여부를 확인할 수 있다.
Example Code
아래는 Flask-RESTful에서 사용자 인증과 기능 별 권한 부여를 구현하는 예제 코드이다.
from flask import Flask, jsonify
from flask_restful import Api, Resource
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth
from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity
app = Flask(__name__)
api = Api(app)
auth = HTTPBasicAuth()
token_auth = HTTPTokenAuth(scheme='Bearer')
jwt = JWTManager(app)
# 테스트용 사용자 데이터
users = {
'user1': 'pass1',
'user2': 'pass2'
}
# Basic 인증
@auth.verify_password
def verify_password(username, password):
if username in users and password == users[username]:
return username
# Token 인증
@token_auth.verify_token
def verify_token(token):
# 토큰 검증 로직 구현
return True
# 토큰 생성
@app.route('/login', methods=['POST'])
def login():
# 로그인 로직 구현
token = 'generated_token' # 토큰 생성 예시
return jsonify({'access_token': token})
# API 핸들러
class ProtectedResource(Resource):
@jwt_required # JWT 인증이 필요한 핸들러
def get(self):
current_user = get_jwt_identity() # 현재 사용자
return jsonify({'message': f'Hello, {current_user}!'})
api.add_resource(ProtectedResource, '/protected')
if __name__ == '__main__':
app.run()
위의 예제 코드에서는 flask-httpauth
와 flask_jwt_extended
라이브러리를 사용하여 Basic 인증과 Token 인증, 그리고 JWT를 이용한 권한 부여를 구현하였다. @auth.verify_password
데코레이터를 사용하여 Basic 인증을 처리하고, @token_auth.verify_token
데코레이터를 사용하여 Token 인증을 처리한다. @jwt_required
데코레이터를 사용하여 JWT 인증이 필요한 핸들러를 정의하였다.
더 자세한 내용은 Flask-RESTful, flask_httpauth, flask_jwt_extended 문서를 참고하기 바란다.
References
- Flask-RESTful documentation: https://flask-restful.readthedocs.io/
- flask-httpauth documentation: https://flask-httpauth.readthedocs.io/
- flask_jwt_extended documentation: https://flask-jwt-extended.readthedocs.io/