본문 바로가기

TIL

2022.12.28 JWT 토큰, 쿠키, 세션 차이

0. 웹 어플리케이션 로그인 구현

쿠키, 세션을 방법과 토큰을 이용하는 방법으로 나뉨

쿠키, 세션 (cookie, session)

Cookie, Session 방식 인증은 기본적으로 세션 저장소를 필요로 합니다. 세션 저장소는 로그인시 사용자 정보를 저장하고, 열쇠로 사용할 수 있는 세션 ID 를 만듭니다. 그리고 HTTP 헤더에 실어 클라이언트에게 보냅니다. 브라우저는 세션 ID 를 포함하는 쿠키를 저장하고있습니다. 인증이 필요한 요청에 해당 쿠키를 끼워 서버에 request 를 보냅니다.

 

인증 절차

  1. 사용자가 로그인을 합니다.
  2. 서버에서는 계정 정보를 읽어 사용자를 확인 후, 사용자의 고유 ID 값을 부여한 후 세션 저장소에 저장하고, 이와 연결되는 세션 ID 를 발행합니다.
  3. 클라이언트는 서버에서 해당 세션 ID 를 받아 쿠키에 저장 한 후, 인증이 필요한 요청마다 쿠키를 헤더에 끼워 보냅니다.
  4. 서버에서는 쿠키를 받아 세션 저장소에서 확인 한 후, 일치하는 정보를 가져옵니다.
  5. 인증이 완료되고 서버는 사용자에 맞는 데이터를 보내줍니다.

Session 과 Cookie 의 차이점

  • Session
    • 서버에서 가지고있는 정보
  • Cookie
    • 서버에서 발급된 세션을 열기 위한  값(세션 ID 라고 칭함)

세션 하이재킹 공격 가능, 서버에 저장 공간 필요

 

JWT Token

  1. Header :: Header, Payload, Verify Signature 를 암호화할 방식(alg), 타입(Type) 등을 포함합니다.
  2. Payload :: 서버에서 보낼 데이터 - 일반적으로 user의 id, 유효기간 포함
  3. Verify Signature :: Base64 방식으로 인코딩한 Header, Payload, Secret key 를 더한 후 서명됩니다.

인증절차

  1. 사용자가 로그인을 합니다.
  2. 서버에서는 계정 정보를 읽어 사용자를 확인 후, 사용자의 고유 ID 값을 부여한 후 기타 정보와 함께 Payload 에 집어넣습니다.
  3. JWT 토큰의 유효기간을 설정합니다.
  4. 암호화할 Secret key 를 이용해 Access Token 을 발급합니다.
  5. 사용자는 Access Token 을 받아 저장 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냅니다.
  6. 서버에서는 해당 토큰의 Verify Signature 를 Secret key 로 복호화한 후, 조작 여부, 유효기간을 확인합니다.
  7. 검증이 완료되었을 경우, Payload 를 디코딩 하여 사용자의 ID 에 맞는 데이터를 가져옵니다.

세션 / 쿠키는 세션 저장소에 유저 정보를 넣는 반면, JWT 는 토큰 안에 유저의 정보들이 넣어진다는 점 입니다. 클라이언트 입장에서는 HTTP 헤더에 세션 ID 나 토큰을 실어서 보내준다는 점에선 동일하지만, 서버 측에서는 인증을 위해 암호화를 한다 vs 별도의 저장소를 이용한다 의 차이가 발생합니다.

 

출처:https://tofusand-dev.tistory.com/89

 

Cookie, Session, Token 의 차이점

Cookie, Session, Token 의 차이점 Cookie, Session, Token 의 차이점 계정 정보를 요청 Header 에 넣는 방식 Session / Cookie 방식 인증 절차 Session 과 Cookie 의 차이점 장단점 Token 기반 인증 방식 JWT Token 인증절차

tofusand-dev.tistory.com

 

 

'TIL' 카테고리의 다른 글

2023.01.04 캐시  (0) 2023.01.05
[WIL] 2022.12.26~12.30  (0) 2023.01.02
2022.12.27 PostMan 사용법  (1) 2022.12.28
2022.12.26 RESTful API  (1) 2022.12.27
[WIL] 2022.12.19~12.23  (0) 2022.12.26