코딩/expressJs

JWT 사용 정리

김 숨 2022. 5. 3. 12:05

✔ 공부하면서 중요하다고 생각한 부분
 - 토큰은 탈취될 가능성이 있기에 탈취 방지/탈취 당했을 경우를 염두해야 한다!

  ex) CSRF 방지 XSS 방지 등

 

✔ 방법

1. Access Token만 사용할 경우

 1) HTTP ONLY 옵션 걸기

 2) 토큰발행시 개인을 식별할 수 있는 정보를 암호화 하여 payload에 넣기(IP 혹은 UUID 등)

 3) 주기를 짧게 하기

 

2. Access Token과 Refresh Token 사용하기

 1) 로그인을 할경우 Access Token / Refresh Token을 발급하고 저장

 2) access token 만료시 refresh token을 이용해 access token 재발급

  *이 때, refresh_token도 재발급하면 좋다고 한다.

 

Q. Refresh Token은 어디다 저장을 해?

1) 쿠키

 

2) DB

 - Mysql에 User정보가 저장된DB에 refresh token저장 

 - Redis를 이용해 key-value를 유저정보-token정보로 저장

 - Redis와 Mysql에 동시 저장 하는 방법도 있다. 

 

Q. AccessToken 재발급은 어떻게 해?

 1) 만료 되었을 때 직접 요청을 보낸다. 

 2) 일정 시간마다 재발급 요청을 자동으로 보낸다.

 

+번외

카카오톡 같은 경우는 어떻게 토큰을 활용하고 있을까?

https://developers.kakao.com/docs/latest/ko/kakaologin/js#advanced-guide

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

Q. 그럼에도 토큰을 쓰려는 이유는?

A. 서버의 부하 방지를 위해서

 

Q. 세션이랑 어떤 차이가 있는지?

A. 내가 생각한 답 : session같은 경우는 API 요청마다 DB 접속을 해야 함 인가 / 인증은 Access Token으로 하되 Refresh Token은 Access Token이 만료되었을 경우에만 DB 접속, 세션보단 상대적으로 부하가 덜 하지 않을까?

 

 

http://www.opennaru.com/opennaru-blog/jwt-json-web-token/