본문 바로가기

STUDY/TIL

JWT를 어디에 저장할까

항상 아무 생각 없이 LocalStorage에 저장했었는데요... 안된답니다..🙅‍♀️

1. LocalStorage

WebStorage의 하나인 localStorage에 저장하는 방식. 가장 흔히 사용하는 방법이다.

  • 장점: 웹 페이지를 새로고침 해도 살아있음
  • 단점: XSS 공격에 취약

sessionStorage는..? localStorage와 똑같다. 브라우저 종료되었을 때 사라지냐, 사라지지 않느냐의 차이

2. Cookie

쿠키에 그냥 저장하는 방식은.. 안전하지 않다.
하지만 httpOnly, sameSite, secure설정을 한다면..?!

  • HttpOnly: javascript에서 document.cookie로 접근하는 것을 막는다
  • SameSite: SameSite=strict설정을하게되면, CSRF 공격으로부터 안전해진다..
  • Secure: 오직 HTTPS에서만 쿠키에 접근할 수 있다
  • 장점: HttpOnly, SameSite, Secure 설정을 한다면 안전하다
  • 단점: 해당 설정을 지원하지 않는 브라우저 스펙이 있음. 만약 해당 설정을 하지 못한다면..? XSS, CSRF공격에 취약함

하지만 상대가 사파리 혹은 인터넷익스플로러라면? 브라우저 지원을 꼼꼼이 살펴봐야 한다..!

3. In Memory

말 그대로 in memory 변수에 저장하는 방법.

  • 장점: 안전
  • 단점: 사용자가 탭을 새로 생성한다면? 사라집니다. 새로운 탭을 열어 다시 로그인을 해야함..! 로그아웃도 탭마다 해줘야 한다고..?

이런 단점에 대한 해결방법을 제시한 가이드가 있다.
한 번 따라해 보겠습니다... 언젠가..

Redis

inMemory 캐시 스토어로 많이 사용되는 Redis에 저장하는 방법. 안전.. 하지만 클라이언트 사이드에서는 이용할 수 없다.

 

 


결론: 브라우저가 쿠키의 설정을 잘 지원만 해준다면 쿠키를 사용하는 것이 좋다. 일단 로컬스토리지에 저장하는 것은 지양할 것!
특히 access_token과 refresh_token의 특징을 잘 이용해야 한다는 것..
access_token의 유효 시간은 짧 을 수 록 좋다!

'STUDY > TIL' 카테고리의 다른 글

객체지향 설계 원칙 5가지 (SOLID)  (0) 2021.07.05
Mock, TestDouble  (0) 2021.06.22
HTTP 상태코드  (0) 2021.05.11
REST URI 설계  (0) 2021.05.04
Spring WebFlux  (0) 2021.04.29