본문 바로가기

기술 검증

Cookie, Webstorage, JWT 개념

728x90
반응형

# Cookie, Webstorage, JWT의 개념

HTTP 의 무상태성

 

HTTP 프로토콜의 중요한 특징 중 하나는 Stateless(무상태성)이라는 것이다. 
Stateless란 서버가 클라이언트의 상태 정보를 저장하지 않는다는 것을 의미한다. 
즉 클라이언트가 연속으로 서버에 요청을 보내도 서버는 요청간에 관계를 알지 못한다.
이는 서버의 확장성에는 큰 장점이 있지만 로그인과 같은 상태 유지가 필요한 기능에서 한계를 가지고 있다. 
이를 보안하기 위해 나온 서비스가 쿠키 서비스이다.

쿠키란?


브라우저 쿠키는 서버가 사용자 브라우저에 전송하는 key : value 구조의 문자열이다. (최대 4KB 저장가능)
브라우저는 쿠키값을 저장해 놓았다가, 동일한 서버에서 재 요청 시 쿠키 데이터를 헤더에 담아 전송한다.

 

로컬 스토리지와 세션 스토리지

 

웹 스토리지에는 로컬 스토리지와 세션 스토리지가 있고 차이점은 아래와 같다.
로컬 스토리지 : 유효기간 없이 데이터를 저장하고, 자바스크립트를 사용하여 삭제 및 브라우저 캐시 또는 로컬 저장 데이터를 지워야만 사라진다.
세션 스토리지 : 탭 범위로 저장되며, 브라우저 탭이 닫힐 때까지만 데이터를 저장한다.

 

보안 이슈

 

위에서 언급한 쿠키, 로컬스토리지 및 세션 스토리지는 XSS와 CSRF 공격에 취약하다.

 

그래서 등장한게 JWT(Json Web Token)이다.

 

JWT를 활용한 로그인 방법은 아래와 같다.

 

1. 클라이언트에서 로그인 요청 후 서버에서 성공적으로 인증되면 access token은 페이로드, refresh token은 Redis에 저장한다.
2. 응답 받은 클라이언트는 access token을 메모리(변수)에 저장한다.
3. 클라이언트에서 권한이 필요한 요청 시에 Authorization 헤더에 access token을 담아 보낸다.
4. access token이 만료되었거나 재 발급이 필요할 경우 재발급을 요청한다. 이 때 refresh token은 세션 스토리지에 담겨진 상태로 서버와 통신하게 된다.
5. refresh token이 만료되면 클라이언트는 사용자를 로그아웃 시킨다.

 

나중에 정리 하자...

 

- 끝 -

728x90
반응형