JWT

최강일·2022년 3월 19일
0

Spring boot

목록 보기
5/7
post-thumbnail

서버 기반 인증 시스템의 문제점

기존의 서버 기반으로 인증하는 방법은 서버 측에서 유저들의 정보를 세션에 기억하고, 이 세션을 유지해야 했다. 규모가 커짐에 따라 서버의 부하는 커지게 된다.

사용자가 늘어 서버를 확장하게 되면 세션을 분산시키는 시스템을 설계해야 한다.

토큰 기반의 인증 시스템

인증받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내도록 하여 유효성 검사를 한다.
이러한 시스템에서는 더이상 사용자의 인증 정보를 서버나 세션에 유지하지 않고 클라이언트 측에서 들어오는 요청만으로 작업을 처리한다.

장점

  • 토큰 자체에 유저 정보를 담아서 http 헤더에 전달하기에 세션을 유지할 필요 없음 -> 유저의 수가 많으면 서버 과부하

  • 서버의 확장에 따른 추가적인 작업이 필요없음

토큰 기반 인증 시스템 작동방식

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

JWT(JSON Web Token)이란?

JSON 포맷을 이용한 가볍고 안전한 정보 교환을 위한 Claim 기반의 Web Token
서버만 아는 Secret 키로 디지털 서명화

Claim : 사용자 정보나 데이터 속성 등을 의미

구조

header.payload.signature .으로 구분된 3가지 형식
Json 형태인 각 부분은 Base64로 인코딩 되어 표현

  • header : typ,alg로 구성. Signature 알고리즘 지정(alg:HS256,typ:JWT)
  • payload : name:kangil과같은 claim으로 구성
  • Signature : 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드
profile
Search & Backend Engineer

0개의 댓글