Stateless(무상태)
프로토콜로 서버가 클라이언트의 상태를 보존하지 않는다.Stateless
- HTTP는 무상태(Stateless) 프로토콜이다.
- 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.
- 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.
- 클라이언트와 서버는 서로 상태를 유지하지 않는다.
Sesseion ID
를 발급Session ID
를 서버의 메모리에 저장 후 클라이언트에게 전달Session ID
를 Cookie
에 저장Session ID
를 포함해서 전송 후 서버는 저장된 Session List
를 확인 후 Authorization
처리Cookie
- 클라이언트(브라우저)에 저장되는 정보
- 매 요청마다 쿠키정보는 자동으로 포함되서 보내진다.
Authorization
을 보다 부담없이 사용하기 위해 나온 기술Token
을 발급하여 통째로 클라이언트에게 전달 stateless
)Token
값이 실려들어오면 Header
+ Payload
값을 서버의 비밀 키
와 함께 돌려봐서 계산된 결과값이 Sign
값과 일치하는 결과가 나오는지 확인.
을 구분자로 이어붙인 것JWT
HMAC SHA256
RSA
Base64
로 디코딩(복호화)해보면 JSON 형식으로 여러 정보들이 들어 있다.조각(claim)
이 name/value
의 한 쌍으로 이루어짐value
)을 작성 가능하다.key
)을 URI
형식으로 짓는다.key/value
설정 가능Session
과 달리 stateless
하기 때문에 상태들을 제어하지 못한다.만료시간을 가깝게 잡아서 토큰의 수명을 짧게 가져가는 방법
로그인을 하면 토큰을 2개 발급
access token
refresh token
refresh token
의 상응값을 DB에 저장
클라이언트는 access token
의 수명이 다하면 refresh token
을 서버에 보낸다.
서버는 DB에 저장해둔 값과 비교한 후에 일치하면 새 access token
발급
refresh token
만 안전하게 관리된다면 이것이 유효할동안은 accees token
이 만료될 때마다 다시 로그인 할 필요없이 새로운 access token
을 발급받을 수 있다.
중간에 access token
이 탈취 당해도 수명이 짧기 떄문에 오래 사용 못하게 된다.
특정 사용자의 토큰을 무효화 시키는 방법으로 refresh token
을 삭제, access token
의 짧은 수명이 지나면 무효화됨
바로 토큰을 무효화 시키는 방법은 없고 access token
의 수명이 다해야 무효화됨 === JWT의 한계