파이썬 Flask를 사용하여 JWT 토큰 기반의 리소스 접근 제어 구현

소개

이번 블로그 포스트에서는 파이썬 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를 이용하여 안전하고 신뢰성 높은 웹 애플리케이션을 개발해보세요!

#파이썬 #Flask #JWT #리소스접근제어 #웹개발