일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬
- Django
- es6
- 장고
- DRF
- javascript
- django ORM
- 파이썬 알고리즘
- c++
- HTML
- Baekjoon
- Git
- Algorithm
- java
- 백준
- MAC
- 알고리즘
- AWS
- 알고리즘 풀이
- web
- django widget
- js
- 알고리즘 연습
- API
- django rest framework
- 알고리즘 문제
- form
- react
- CSS
- PYTHON
- Today
- Total
수학과의 좌충우돌 프로그래밍
[WEB] JWT를 어디에 보관해야할까 본문
저번 포스팅에서는 JWT에 대해서 알아보았습니다.
https://ssungkang.tistory.com/entry/WEB-Authentication-2-JWT
JWT를 결국 클라이언트가 보관해야하는데 그 보관을 어디서 할 것인가에 대해 알아봅시다.
이번 포스팅은 웹 어플리케이션을 기준으로 이야기 하겠습니다.
Web Storage
Web Storage
은 HTML5부터 지원되는 기술로 브라우저에 데이터를 저장할 수 있는 방법입니다.
Web Storage
는 session storage
와 local storage
로 구분됩니다.
sessionStorage
sessionStorage는 각 세션마다 데이터가 개별적으로 저장됩니다.
즉 여러 개의 탭을 실행 중이면 각 탭 별로 따로 데이터가 저장됩니다.
이 때 세션이 다르면 다른 세션의 sessionStorage에 접근할 수 없습니다.
sessionStorage에 데이터를 저장하고 가져오는 방법은 아래와 같습니다.
sessionStorage.setItem('myCat', 'Tom');
var myCat = sessionStorage.getItem('myCat');
localStorage
localStorage는 브라우저에 반영구적으로 저장됩니다.
브라우저를 종료해도 데이터가 유지되며 도메인 기준으로 저장을 합니다.
A.com에서 B.com에 저장한 데이터를 접근할 수 없습니다.
localStorage에 데이터를 저장하고 가져오는 방법은 아래와 같습니다.
localStorage.setItem('myCat', 'Tom');
var myCat = localStorage.getItem('myCat');
두 방법 모두 javascript를 통해 쉽게 sotrage에 접근이 가능합니다.
쉽게 접근할 수 있다는 것은 장점이나 단점입니다.
XSS 공격에 취약해지기 때문에 보안 상의 문제가 발생합니다.
용량은 5MB로 cookies에 비해 여유롭습니다.
Cookies
Cookies
는 예전부터 많이 사용하던 기술로 기본적인 개념은 아래 링크에서 확인할 수 있습니다.
Cookies
는 용량이 4KB로 Web Storage
에 비해 매우 작습니다.
하지만 Cookies
는 HttpOnly
옵션이 있습니다.
해당 옵션을 통해 자바스크립트를 통한 Cookies
접근을 막아 XSS 공격을 방지 할 수 있습니다.
또한 Secure
옵션을 통해 HTTPS로만 쿠키가 통신되도록 하여 보안을 더 높여 줄 수 있습니다.
하지만 CSRF 공격에는 취약합니다.
결론
두 가지 방법 모두 장단점이 있지만 결국 인증을 위한 JWT를 저장하는데 있어서 가장 중요한 부분은 보안입니다.
Cookies
에 저장하고 위에서 설명한 여러 옵션을 적용하여 보안을 강화할 수 있습니다.
비록 CSRF 공격에는 취약하지만 이 역시 CSRF TOKEN을 사용하여 보안을 강화할 수 있으므로 Cookies
에 저장하는 방법이 더 좋다고 생각합니다.
'웹프로그래밍 > 이론' 카테고리의 다른 글
[WEB] REST API 란 (0) | 2021.06.14 |
---|---|
[WEB] GraphQL, REST API의 대체? (0) | 2021.05.31 |
[WEB] Authentication (2) JWT (0) | 2021.05.18 |
[WEB] URI vs URL vs URN 비교 분석 (0) | 2020.10.19 |
[WEB] HTTP 요청 메서드 비교 정리 (0) | 2020.10.15 |