본문 바로가기
Java 웹 프로그래밍

JWT (JSON Web Token) - 2

by irerin07 2020. 4. 28.
728x90

JWT (JSON Web Token) - 1

JWT (JSON Web Token) - 2

JWT (JSON Web Token) - 3

토큰 저장 위치

서버가 토큰을 발급하면 브라우저에서 사용자와 서버간에 토큰이 전달되는 방식은 크게 두가지로 나뉜다.

1. 로그인 성공시 서버가 토큰을 응답정보에 담아서 전달하도록 하고, 해당 값을 웹 스토리지(localStorage, sessionStorage)에 넣고, 그 다음부터 웹 요청을 할 때는 HTTP 헤더 값에 넣어서 요청하는 방법

2. 발급된 토큰을 쿠키에 넣는 것.

첫번째 방법은 구현하기 쉽고 하나의 도메인에 제한되어있지 않다는 장점이 있지만 XSS(Cross Site Scripting) 공격에 취약하여 공격자의 악성스크립트에 노출이 되어 탈취 당하기 쉽다는 단점이 있다.

이러한 단점을 보안하는 방법이 바로 두번째 방법이다.

쿠키를 사용하여 정보 전송수단으로 사용하는 방법인데, 이 과정에서 서버측에서 응답을 하면서 쿠키를 설정 해 줄 때 httpOnly값을 활성화 하면 네트워크 통신 상에서만 해당 쿠키가 붙게 된다. 즉, 브라우저상에서 자바스크립트로 토큰값에 접근하는것이 불가능해진다.

하지만 쿠키가 한정된 도메인에서만 사용이 된다는 단점 때문에 토큰이 필요해지는 경우 현재 쿠키에 담겨있는 토큰을 사용하여 새 토큰을 문자열로 받아올 수 있게하는 API를 구현해야 한다.

추가적으로 XSS의 위협에서는 자유롭지만 CSRF(Cross-Site-Request-Forgery) 공격에 취약하다. 이를 해결하기 위해 HTTP요청 레퍼러 체크, 그리고 CSRF토큰의 사용을 통해 방지 할 수 있다.

728x90