cookie, session, token

장윤성·2022년 9월 22일
0
post-thumbnail

왜?


면접을 볼때 jwt와 session을 이용한 인증방식의 차이점을 물어봤는데, 거기에 대해서 명확하게 대답하지 못했다. 그리고 생각해보니 쿠키랑 세션의 차이라고 하면 유효기간의 차이말고는 명확하게 설명을 할 수 없었다. 그렇기에 이번에는 세션, 쿠키 그리고 토큰에 대해서 알아보자

🍪 쿠키


서버가 유저에 대해 기억하기 위해 브라우저에 데이터를 저장하게 되는데 이 데이터를 쿠키라고 한다.

동작 방식

  1. 유저가 페이지를 요청함
  2. 서버에서 쿠키를 생성한 후, 응답함
  3. 브라우저 에서 쿠키를 저장함
  4. 서버에서 정보를 처리해야하는 요청이 발생한다면, 쿠키를 업데이트 한 후 응답

특징

  • key-value 형태의 string이다.
  • 서버가 유효기간을 정할 수 있다.
  • 브라우저가 종료되어도 유지된다.
    ->오히려 보안문제를 발생시킨다.
  • 따로 요청이 없어도 브라우저가 서버에 request를 보낼때 자동적으로 서버에 전송된다.
  • 도메인에 따라 제한된다. ex) 유튜브에서 받은 쿠키는 유튜브에서만 주고 받고 가능
  • 인증뿐 아니라 여러가지 정보를 저장할 수 있다. ex) 언어설정
  • 공간제약이 있어서 엄청 긴 string을 보낼 수 없다.

📄 세션


브라우저에서 유저 정보를 관리하는 쿠키와 달리 서버에서 유저 정보를 관리한다.

동작 방식

  1. 유저가 서버에 접속해 서버가 sessionDB에 해당하는 sessionID(유일한 id)를 생성해 받는다. 이 id는 쿠키를 통해 브라우저로 돌아오고 저장된다.
  2. 사이트에서 다른 페이지에 접속한다면 브라우저가 가지고 있는 id가 있는 쿠키를 서버에게 보낸다.
  3. 해당 쿠키에 있는 sessionId를 통해 sessionDB에 접속해 해당 id가 누구인지 찾은 후에 존재한다면 인증이 된다

특징

  • 이용자가 많다면 서버의 성능이 매우 중요해진다.
  • 유저의 정보를 서버에 두어 보안이 좋지만 서버가 무거워진다.
  • 유저에게 유니크한 id를 주고 관리한다.
  • 브라우저가 종료될때까지만 인증상태가 유지된다.
  • 서버에는 중요한 유저의 정보가 모두 있지만 유저는 sessionID만 가지고 있다.
  • 서버에 로그인되어있는 모든 유저의 정보를 저장하기 때문에 새로운 정보들을 추가할 수 있다. ex) 서버에서 강제 로그아웃 시키기

💰 토큰(JWT)


JSON Web Token의 약자이다.토큰(정보의 일부를 이용해 서명 알고리즘을 이용해 암호화된)을 서버와 주고 받으며 그때마다 인증을 하기 때문에 저장소도 필요하지 않다.

동작 방식

  1. 서버에 로그인 정보를 보낸다.
  2. 서버에 정해져 있는 사인 알고리즘을 이용해서 서명을 한 후 string 형태로 유저에게 보낸다.
  3. 이제 서버에 request를 보낼때 유저 정보 or 토큰을 보낸다.이때 서버가 토큰을 받으면 해당 서명이 유효한지 체크한 후 유효하다면 인증을 완료한다.

특징

  • 서버가 정한 유효기간을 만족할때까지 계속 사용 가능
  • 암호화된것이 아니다.
  • 아무나 토큰의 내용을 볼 수 있다. -> 그렇기에 보안에 필요한 정보는 서버에 저장해놓음
  • http통신에서 header에 담겨 보내진다.
  • 유저를 인증하는데 필요한 정보를 토큰에 저장한다.
  • header | payload | signature 로 구성되어있다.
  • 공간제약이 없어 엄청 긴 문자열로 이루어져 있어도 괜찮다.
  • 로그인된 유저의 정보를 컨트롤할 수 없다.
    -> 강제로 로그아웃 시킬수 없기 때문에 유효기간을 줄이고 토큰을 재발급하는 구조로 사용한다.
profile
소개를 어떻게 한줄로 해요..

0개의 댓글