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