Maxima's Lab

[Flask] Json Web Token (JWT) 사용 방법 - (Token 생성 및 접근) 본문

Web Programming

[Flask] Json Web Token (JWT) 사용 방법 - (Token 생성 및 접근)

Minima 2024. 5. 21. 23:04
728x90
SMALL

안녕하세요, 오늘은 Vue.js 프로젝트에서 Json Web Tokens (JWT)를 사용하는 방법에 대해서 알아보겠습니다.

 

Backend에서는 Flask를 사용하여 Token을 생성할 예정입니다.

 

먼저, 다음과 같이 파이썬 패키지를 설치합니다.

 

pip install flask flask_cors flask_apscheduler flask[async] Flask-SoketIO 
pip install Flask-JWT-Extented python-dotenv

 

import os

from flask_socketio import SocketIO, emit
from flask import Flask, request, jsonify, render_template, redirect, session, g
from flask_cors import CORS
from flask_apscheduler import APScheduler
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity, verify_jwt_in_request
from dotenv import load_dotenv

load_dotenv()

class Config:
    SCHEDULE_API_ENABLED = True

app = Flask(__name__)
app.config.from_object(Config())
jwt = JWTManager(app)

app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
app.config['JWT_SECRET_KEY'] = os.getenv('JWT_SECRET_KEY')

CORS(app, resources={r'/*': {'origins' : '*'}})

# user 및 비밀번호 설정
users = {"test": "testpw"}


# Route 설정 및 JWT token 생성
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)

    if not username or not password:
        return jsonify({"msg": "잘못된 요청"}), 400

    if username not in users or users[username] != password:
        return jsonify({"msg": "유저 또는 비밀번호 잘못된 입력"}), 401

    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token), 200


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

 

위의 코드에서 다음과 같은 명령어로 token에 접근할 수 있습니다.

 

curl -X POST -H "Content-Type: application/json" -d '{"username": "test", "password": "testpW' http://127.0.0.1:5000/login

 

해당 명령어 입력에 따른 결과는 다음과 같습니다.

 

{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcxNjI5OTcxNSwianRpIjoiMzU1MmQ2MGUtZTIzMy00NWQyLWE4ZTEtZTNiMjYwNGUwOGM1IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6InRlc3R1c2VyIiwibmJmIjoxNzE2Mjk5NzE1LCJjc3JmIjoiZjFkMmMyYWQtZDEwZi00NzYzLWJkN2ItMmM1NTIzZDZmOGNhIiwiZXhwIjoxNzE2MzAwNjE1fQ.ZZIhJKC3yis-KusJIC6Z7oTu69dkTrB0Xi5gtsAOff4"}

 

위의 access_token은 POST 할때 마다 다른 token이 생성되게 됩니다.

 


지금까지, Flask에서 Toekn을 생성하고 접근하는 방법에 대해서 알아보았습니다.

감사드립니다.

728x90
LIST
Comments