본문 바로가기
IT/파이썬

JWT access token, refresh token 용도

계속 수정중입니다. (2021.06.30)

이론 내용들

JWT 를 이용해서 사용자 로그인 세션 처리를 하려니 용어가 access token, refresh token 이렇게 나오네.

일단 당연히 구글 검색을...

일단 JWT는

JWT 구성 from https://kibua20.tistory.com/83

로그인 정보로 DB 검증이 되면 access token, refresh token을 발행해라

이때 access token 은 기한을 분단위로 (30분, 15분등등) 만료가 되도록 발행하고,

refresh token은 한 일주일 정도의 만료기간으로 발행해라.

 

대부분의 접근은 access token으로 이루어진다. HTTP 헤더에 bearer option 필드에 이 access token 값을 넣어서 접근하는 방법이다.

만료가 되었거나, 만료가 다 될 것을 클라이언트에서 미리 인지하거나 하면 refresh 토큰을 이용하여 재 발급을 받는 과정을 거치면 계속 사용할 수 있다.

 

여기가 살짝 헷갈리네, 

access token 자리에 refresh token 값을 넣어서 특정 url 쪽으로 접근해서 재 발급 받아라는 것으로 이해가 되는데..아래 글들을 보면 2개를 다 보낸다는 얘기도 있고, 2개를 다 보내려면 헤더 어디에 실어주나..

 

그리고, 

From Grphql을 사용하는 Frontend에서 JWT다루기
근데, 내 JWT를 다른사람이 훔쳐서 쓸수도 있잖아요?

맞습니다. 올바르게 로그인을 해서 Access Token을 받은 후에 Access Token을 탈취당하는 경우가 있습니다. Access Token을 훔친 도둑은 마치 자신이 해당 서비스의 회원인것처럼 API Request를 막 날릴 수 있습니다. 이런 이유때문에 Access Token에는 만료 기한이 설정되어있습니다. 보통 15분정도로 설정해 놓습니다. 이 시간이 지나면 해당 Access Token로는 더이상 서버와 통신할 수 없습니다. Access Token절도를 방지하려면, Access Token를 cookie나 localstorage에 보관하지 않는것이 중요합니다.

토큰이 만료가 되면...

서버는 Access Token이 만료되면 401 Unauthorized 에러를 보내겠죠. Client쪽에서는 401 Unauthorized 에러 메세지를 받으면, logout을 시켜버리면 됩니다.

 

계속 찾아보고 정리하고, 먼저 찾아둔 레퍼런스 글들만 정리해 두자.

 

토근 값만 있으면 정보를 다시 추출해서 보여주는 사이트는 일단 키핑.

https://jwt.io/

 

jwt.io 사이트에서 직접 생성한 JWT 파일 정보 보기

만료를 15분으로 해 뒀더니, nbf, exp을 빼 보면 900 (초) 즉, 15분으로 딱 적혀있네.

 

구현 예제

딱 기본만 구현해 둔 설명 사이트

flask_jwt_extended 를 이용한 튜토리얼 사이트인데, React Frontend 구현부분 까지 설명이 포함되어 있다.

https://content.breatheco.de/en/lesson/what-is-JWT-and-how-to-implement-with-Flask

 

Understanding JWT and how to implement a simple JWT with Flask

What is JSON Web Token (JWT), how it works and how to apply it to your API using the Flask Microframework for API Development

content.breatheco.de

From - https://www.programmersought.com/article/55186356815/ 

The most basic usage does not require many calls, only three functions are used:
1. create_access_token()Used to create token
2. get_jwt_identity()Used to obtain the previous identity information based on the token
3. jwt_required()This is a decorator to protect flask nodes

 

추가 레퍼런스 글들

- https://yonghyunlee.gitlab.io/node/jwt/

 

세션 기반 인증 방식과 토큰 기반 인증(JWT) - 김땡땡's blog

세션 기반 인증 방식 옛날에 토큰 기반 인증이 없었을 때 서버 세션을 사용해 인증을 했다. 클라이언트가 로그인 성공하면 서버가 유저 세션을 만들고 메모리나 데이터베이스에 저장한다. 서버

yonghyunlee.gitlab.io

- https://tansfil.tistory.com/59

 

쉽게 알아보는 서버 인증 2편(Access Token + Refresh Token)

안녕하세요! 이전 포스팅에는 크게 세션/쿠키 인증, 토큰 기반 인증(대표적으로 JWT)에 대하여 알아보았습니다. 저희가 앱, 웹 혹은 서버 개발을 하면서 꼭 사용하게 되는 인증(Authorization)은 아주

tansfil.tistory.com

여기 사이트에서 그려준 그림이 참 맘에 드네요.

jwt 사용자 인증 from https://tansfil.tistory.com/59

같은분이 적은 글 같기도 하네요. 여기에는 더 많이 정리되어 있네요.

https://wrkholic84.github.io/Authentication/

 

Authentication

웹 애플리케이션이나 모바일 앱에서 사용자 계정 관리를 하고 있다면 사용자 인증은 반드시 필요한 기능이다. (물론, 계정이 있는 서비스라면 종류에 상관없이 모두 인증 과정이 있어야 하는 것

wrkholic84.github.io

Grphql을 사용하는 Frontend에서 JWT다루기

 

Grphql을 사용하는 Frontend에서 JWT다루기 - Develoger

Json Web Token.

develoger.kr

- https://kohen.tistory.com/3?category=743309 

 

[Back-end] jwt token 통신과정

JWT Token 통신과정 Token Object 구조 [기다릴개] 프로젝트 내에서 JWT 토큰을통한 로그인 유지를 구현하기 위해 다음과 같은 전략하에 통신을 진행하였다. {  "status" : 200,  "message" : "token 발급 성공"..

kohen.tistory.com

- https://showerbugs.github.io/2017-11-16/OAuth-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

OAuth 란 무엇일까 · Showerbugs

OAuth 란 무엇일까 정리중 아래와 같은 로그인 창을 보셨을 것입니다. 별도의 회원가입 없이 로그인을 제공하는 플랫폼의 아이디만 있으면 서비스를 이용 할 수 있습니다. 외부 서비스에서도 인

showerbugs.github.io