사용자 인증이 유효한 시간을 명시 가능하고, 브라우저가 종료되어도 유효시간이 남아있으면 인증이 유지된다. 서버에서 생성되고 사용자의 컴퓨터에 사용자 정보를 저장한다.
쿠키만으로 인증을 할 경우, 해커가 HTTP 요청을 중간에서 뺏어갈 때, 모든 정보가 탈취될 수 있다.
쿠키는 조작된 데이터일 수 있으므로 실제 정보가 존재하는 database를 사용해서 작업해야 한다.
방문 사이트에서 로그인 시, 아이디와 비밀번호를 저장
쇼핑몰의 장바구니(비 로그인시 장바구니에 담았던 품목을 로그인 시 그대로 유지하기 위해서)
일정 시간 동안 같은 사용자, 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시킨다. 서버에 사용자 정보를 저장한다.
사용자의 정보를 서버에 저장하기 때문에 쿠키보다 보안에 우수하다.
사용자가 많아질 경우 서버 메모리를 많이 차지하게 되어 성능 저하의 요인이 된다.
로그인과 같이 보안 상 중요한 작업
Session & Cookie 방식은 기본적으로 세션 저장소를 필요로 한다. 세션 저장소는 로그인 시 사용자 정보를 저장하고, 열쇠로 사용할 수 있는 세션 ID를 만든다. 그리고 HTTP 헤더에 실어 클라이언트에게 보낸다.
인증의 책임을 서버가 지게 하기 위해서 세션을 함께 사용한다. 사용자는 쿠키를 이용하고, 서버에서는 쿠키를 받아 세션의 정보를 접근하는 방식으로 활용한다.
쿠키가 담긴 HTTP 요청이 도중에 노출되더라도 쿠키 자체는 유의미한 값을 갖고 있지 않아 안전하다. 중요한 정보는 서버 세션에 존재한다.
고유의 ID 값을 발급받기 때문에 서버의 자원에 접근하기 용이하다.
임의로 생성된 비밀번호 같이 동작한다. 제한된 수명을 가지고, 한 번 만료되면 새로 생성되어야 한다.
세션/쿠키와 달리 발급 후 검증만 하기 때문에 추가 저장소가 필요하지 않아서 서버를 확장하거나 유지, 보수하는데 유리하다.
토큰 기반으로 하는 다른 인증 시스템에 접근이 가능하다.(Facebook, Google등 권한을 받을 수도, 프로필을 웹사이트에 제공하도록 허가 할 수도 있다.)
이미 발급된 JWT에 대해서 악의적으로 이용될 경우에도 유효기간이 만료될 때 까지 계속 사용이 가능하다.
Payload 정보가 따로 암호화되지 않기 때문에 누구나 확인할 수 있어서 정보가 제한적이다.
JWT의 길이가 길기 때문에 인증이 필요한 요청이 많아질수록 서버의 자원낭비가 발생한다.