on
[Python] JWT(Json Web Token) 사용하기 (Flask)
[Python] JWT(Json Web Token) 사용하기 (Flask)
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/
728x90
from http://dev-code-notepad.tistory.com/72 by ccl(A) rewrite - 2021-03-02 13:26:39