728x90

(1) JWT(Json Web Token)란?

  • Json Web Token의 약자입니다.
  • 서버와 클라이언트 간 정보를 주고 받을 경우 별다른 인증과정 없이 Http Request 헤더에 포함되어 있는 토큰을 통해 인증합니다.
  • 토큰은 비공개 Secret 키 또는 공개/비공개 키를 사용하여 서명합니다.
  • 장점
    • 다수의 도메인 - 쿠키는 발행한 서버에서만 유효하지만 JWT는 토큰만 유효하다면 상관없습니다.
    • 선택적인 권한 부여 - 아마존에 구글 계정으로 로그인 할 수 있어도 아마존이 로그인한 구글 계정의 메일을 읽을 수 없습니다.
    • 다양한 디바이스 지원 - 웹 앱 간의 상이한 쿠키 세션을 처리할 수 있습니다.
  • 단점
    • 토큰은 데이터베이스를 조작하더라도 토큰에 적용할 수 없습니다.
    • 데이터 트래픽 크기에 영향을 미칠 수 있습니다.

(2) JWT(Json Web Token) 구조

JWT 구조
JWT Encoded, Decode 예제

  • HEADER
    • alg - 알고리즘 방식을 지정합니다
      • HS256
      • RSA
    • typ - 토큰의 타입을 지정
      • JWT
  • PAYLOAD
    • iss(issuer) - 토큰 발급자
    • sub(subject) - 토큰 제목
    • aud(audience) - 토큰 대상자
    • exp(expiration) - 토큰 만료시간 (항상 현재시간보다 늦어야 함)
    • nbf(not before) - 토큰 활성 날짜
    • iat(issued at) - 토큰 발급시간
    • jti(JWT ID) - 토큰 식별자
  • SIGNATURE

(3) Code (Python)

  • 토큰 발행
SECRET_KEY = 'secret_key'

@app.route('/api/login', methods=['POST'])
def login_post():
	payload = {
         'email': username_receive,
         'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')
        
	return jsonify({'result': 'success', 'token': token})
  • 토큰 확인
SECRET_KEY = 'secret_key'

payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])

참조 - www.opennaru.com/opennaru-blog/jwt-json-web-token/, covenant.tistory.com/201, jwt.io/

반응형

'Study > python' 카테고리의 다른 글

[Python] Deque 자료형 (Collections)  (0) 2021.03.16
[Python] Cookie Session에 저장 및 불러오기 (Flask)  (0) 2021.03.01

+ Recent posts