SESSION/TOKEN/JWT/COOKIE/ServerlessSession 비교
session
{id:1, username..} -> encryt -> adfadsfasd(암호문 브라우저 session등록)
-> decrypt -> {id:1, username..}(백앤드에서 암호문 해독하여 user정보 활용)
1 로그인하면 서버에서 세션DB에 유저정보를 생성함
2. 세션DB에서는 유저정보를 Id별로 저장하고 그 id를 쿠키로 브라우저에 보냄
3. 브라우저에서 페이지를 이동할 때마다 세션ID를 가진 쿠키를 서버에 보냄
4. 서버는 브라우저로부터 받은 세션ID쿠키를 세션디비에 조회를 하여 유저정보를 파악함
* 브라우저에서는 세션정보가 암호화 되어 유저가 볼 수 없음
* 이용하는 경우 현재 로그인한 유저들의 모든 세션ID를 DB에 저장해야함
* 쿠키는 앱에서 사용 불가능함
token
1. 브라우저에 토큰(그냥 string임)을 보냄(쿠키를 사용불가능한 앱에서 token이용)
2. 서버는 받은 토큰으로 세션DB에서 유저를 조회함
jwt token
signature:abc -> {id:1, username.., signature:abc} ->
{id:1, username.., signature:abc} -> check signature -> {id:1, username..}
* jwt토큰은 유저가 로그인할 때 세션DB를 사용하지 않으므로 사인된 정보를 string으로 브라우저에 보냄
브라우저 사인된 정보(토큰)를 가지고 있다가 필요할 때마다 서버에 보냄
서버에서 사인된 정보를 받으면 사인이 유효한지 체크하고 유저를 인증
* 서버는 유저를 인증하는데 필요한 정보를 토큰에 저장하여 브라우저에 보내고
* 브라우저가 request할 때 함께 보낸 토큰을 받을 때 해당 토큰이 유요한지 검증하고 response함
cookie
브라우저에서 로그인 정보 서버에 전달 -> 서버에서 브라우저에 쿠키를 전달
-> 서버는 브라우저에서 일부 계속 가지고 있어야하는 정보는 쿠키로 저장하도록 함 ->
이후 브라우저에서 서버로 정보를 요청할 때 쿠키와 함께 보내서 인가를 하거나 나에게 필요한 정보만 받을 수 있음
serverless session
serverless session은 세션DB를 사용하지 않으며 그냥 유저정보를 쿠키를 통해 암호화하 브라우저 쿠키에 등록
사실상 serverless session은 쿠키방식에 가까움
iron-session은 암호화된 JWT랑 비슷하지만
차이점으로
브라우저에 저장된 JWT는 BE에서 조정하지 못하지만,
iron-session은 쿠키형식으로 브라우저에 있더라도 BE에서 삭제할 수 있음.