승상의 코딩 블로그

토큰 기능 테스트를 위한 간단한 Flask 서버 만들기 본문

Flutter (플러터)

토큰 기능 테스트를 위한 간단한 Flask 서버 만들기

양승상 2023. 8. 8. 06:36

플러터로 토큰 기능도 구현해보고 싶어서, 토큰을 생성하고 토큰을 체크하는 간단한 Flask 서버를 만들어 봤다.

  • /auth/login : 토큰 발급
  • /auth/check : 발급된 토큰 체크

코드

* 실제 운용할 때 사용하는 코드가 아닙니다. 토큰 기능 테스트를 위해 만들었기 때문에 보안 등 많은 것들이 빠져있습니다. 

from datetime import datetime, timedelta
from http import HTTPStatus

import jwt
from flask import Flask, jsonify, request

app = Flask(__name__)

# 로그인 시 ID, PASSWORD 는 고정한다.
ID = "sm"
PASSWORD = "1234"
SECRET_KEY = "KEY"

@app.route('/auth/login', methods=['POST'])
def login():
	# 토큰을 발급할 때 사용하는 함수이다.
    # id, pw 는 form 데이터로 전송된다고 고려한다.
    # Return 값
    # {
    #	accessToken : XXXXXX
    # }
    userId = request.form['userId']
    userPw = request.form['userPw']
    
    if ID != userId:
        return 'Not Matched', HTTPStatus.FORBIDDEN
    
    if userPw != PASSWORD:
        return 'Not Matched', HTTPStatus.FORBIDDEN
    
	# Token 을 발급하는 함수이다. 유효기간은 5분으로 설정한다.
	token = jwt.encode(
	{'user_id': userId, 'exp':datetime.utcnow() + timedelta(minutes=5)},
    SECRET_KEY, algorithm = 'HS256')

    return jsonify({"accessToken": token})

@app.route('/auth/check', methods=['POST'])
def check():
	# 발근된 토큰을 체크해보기 위한 함수이다.
    # 토큰은 요청 헤더의 Authorization 에 있다고 가정한다.
    authHeader = request.headers.get('Authorization')    
    
    if authHeader == None:
        return '', HTTPStatus.FORBIDDEN
    
    try:
        jwt.decode(authHeader, SECRET_KEY, algorithms=['HS256'])
    except jwt.ExpiredSignatureError:
    	# Token 의 유효기간이 지났을 경우 에러를 발생시키기 때문에 에러처리를 해준다.
        return 'EXPIRED_TOKEN', HTTPStatus.FORBIDDEN
    
    return "GOOD", HTTPStatus.OK
    

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

 

테스트

POSTMAN 이라는 프로그램을 통해 누군가 아이디와 비밀번호를 전송하여 테스트 해보기로 했다.

127.0.0.1:5000/auth/login 으로 URI 를 설정하고 Body 에 form-data 형식으로 userId, userPw 를 넣고 Send 버튼을 누른다.

그러면 하단에 요청에 대한 응답이 뜬다. accessToken 이 정상적으로 발급되었음을 확인할 수 있다.

/auth/login

발급된 토큰을 Header 의 Authorization 항목을 추가하여 127.0.0.1:5000/auth/check 로 Send 한다.

그러면 정상적으로 GOOD 이라는 응답을 받는 것을 볼 수 있다.

 

/auth/login

 

POSTMAN 에서 토큰을 붙여넣지 않고 자동으로 업데이트 할려면...

2023.08.08 - [Flutter (플러터)] - Flask 서버 토큰 테스트 시, Postman 의 다른 API 에 토큰 값 자동 갱신

 

Flask 서버 토큰 테스트 시, Postman 의 다른 API 에 토큰 값 자동 갱신

2023.08.08 - [Flutter (플러터)] - 토큰 기능 테스트를 위한 간단한 Flask 서버 만들기 이전 글에서 Postman 을 사용하면서 불편한 점이 있었다. 아래 사진처럼 발급된 토큰을 일일히 다른 API 에 업데이트

seungsang.tistory.com

 

반응형
Comments