파이썬 Flask를 사용하여 JWT 토큰 기반의 다중 계정 로그인 기능 구현 방법

이번 포스트에서는 파이썬 Flask 프레임워크를 사용하여 다중 계정 로그인 기능을 구현하는 방법에 대해 알아보겠습니다. 이러한 로그인 기능은 JWT (JSON Web Tokens) 토큰을 사용하여 보안성을 강화합니다.

전제 조건

이 예제를 구현하기 위해 다음과 같은 전제 조건이 필요합니다:

Flask 프로젝트 설정

우선, 파이썬 가상 환경을 설정하고 필요한 패키지를 설치합니다. 가상 환경을 설정하는 방법은 생략합니다.

$ pip install flask flask-jwt-extended

다음으로, Flask 애플리케이션을 작성해보겠습니다.

from flask import Flask, jsonify, request
from flask_jwt_extended import JWTManager, jwt_required, create_access_token

app = Flask(__name__)

# 애플리케이션 시크릿 키 설정
app.config["JWT_SECRET_KEY"] = "super-secret"
jwt = JWTManager(app)

# 사용자 계정 정보
users = {
    "user1": "password1",
    "user2": "password2"
}

# 로그인 엔드포인트
@app.route("/login", methods=["POST"])
def login():
    username = request.json.get("username", None)
    password = request.json.get("password", None)

    # 유효한 사용자인지 확인
    if username in users and password == users[username]:
        access_token = create_access_token(identity=username)
        return jsonify(access_token=access_token)

    return jsonify({"msg": "Invalid username or password"}), 401

# 보호된 엔드포인트
@app.route("/protected", methods=["GET"])
@jwt_required
def protected():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

if __name__ == "__main__":
    app.run()

위 코드에서 app.config["JWT_SECRET_KEY"] 부분에 애플리케이션에 사용할 시크릿 키를 설정합니다. 이 키는 토큰의 암호화 및 복호화에 사용됩니다. users 변수에는 사용자 계정 정보를 딕셔너리 형태로 저장합니다.

로그인 엔드포인트에서는 클라이언트로부터 받은 사용자 입력 정보를 확인하여 유효성을 검사합니다. 유효한 사용자인 경우에는 JWT 토큰을 생성하여 반환하고, 그렇지 않은 경우에는 적절한 오류 메시지를 반환합니다.

보호된 엔드포인트는 @jwt_required 데코레이터를 사용하여 인증된 사용자만 접근할 수 있도록 설정합니다. 로그인한 사용자의 아이디를 확인하여 반환합니다.

Flask 애플리케이션을 실행하고 /login 엔드포인트로 POST 요청을 전송하여 로그인을 시도할 수 있습니다. 로그인이 성공하면 /protected 엔드포인트로 GET 요청을 전송하여 보호된 리소스에 접근할 수 있습니다.

마무리

이렇게하면 다중 계정 로그인 기능을 JWT 토큰을 사용하여 파이썬 Flask 프레임워크에서 구현할 수 있습니다. JWT 토큰은 보안적으로 안전한 로그인 시스템을 구축하는 중요한 요소입니다. 이를 통해 사용자 인증과 접근 제어를 쉽게 구현할 수 있습니다.

#파이썬 #Flask #JWT #다중계정로그인