JWT vs 세션 기반 인증

서규범·2022년 12월 6일
0

JWT (JSON Web Token)

  • Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
  • 토큰을 통해 사용자 인증 처리
  • Header, Payload, Signature의 3 부분으로 구성

세션 기반 인증

  • 서버 측에서 사용자들의 정보를 기억
  • 사용자들의 정보를 기억하기 위해서는 세션을 유지해야 함 -> 오버헤드 발생

JWT를 사용하게된 원인

  • 사용자의 정보를 유지하기 위해, 세션과 쿠키를 사용 -> 유저 수가 늘어날 경우 세션의 양으로 인해 메모리 부하 발생
  • 서버를 여러개로 확장시킬 경우 세션 분산 기술 요구

--> 따라서 토큰 방식의 인증을 통해 서버의 부하 방지 및 유연성을 확보


토큰 기반 인증 과정

  1. 사용자가 아이디와 비밀번호로 로그인
  2. 서버 측에서 해당 정보를 검증
  3. 정보가 정확하다면 서버 측에서 사용자에게 Signed 토큰 발급(Signed는 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature를 가지고 있다는 것)
  4. 클라이언트 측에서 전달받은 토큰을 저장, 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달 (이때 Http 요청 헤더에 토큰을 포함)
  5. 서버는 토큰을 검증하고, 요청에 응답한다.

JWT의 구조

  • HEADER : 헤더에는 토큰의 종류와 SIGNATURE 생성을 위해서 어떤 알고리즘을 사용했는지가 명시되어 있음

  • PAYLOAD : 로그인한 유저임을 증명할 수 있는 기본적인 정보, 차후에 클라이언트가 다시 토큰을 보내면 해독해서 DB내의 유저 정보와 비교

  • SIGNATURE : 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드

profile
하려 하자

0개의 댓글