JWT (JSON Web Token)
- Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
- 토큰을 통해 사용자 인증 처리
- Header, Payload, Signature의 3 부분으로 구성
세션 기반 인증
- 서버 측에서 사용자들의 정보를 기억
- 사용자들의 정보를 기억하기 위해서는 세션을 유지해야 함 -> 오버헤드 발생
JWT를 사용하게된 원인
- 사용자의 정보를 유지하기 위해, 세션과 쿠키를 사용 -> 유저 수가 늘어날 경우 세션의 양으로 인해 메모리 부하 발생
- 서버를 여러개로 확장시킬 경우 세션 분산 기술 요구
--> 따라서 토큰 방식의 인증을 통해 서버의 부하 방지 및 유연성을 확보
토큰 기반 인증 과정
- 사용자가 아이디와 비밀번호로 로그인
- 서버 측에서 해당 정보를 검증
- 정보가 정확하다면 서버 측에서 사용자에게 Signed 토큰 발급(Signed는 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature를 가지고 있다는 것)
- 클라이언트 측에서 전달받은 토큰을 저장, 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달 (이때 Http 요청 헤더에 토큰을 포함)
- 서버는 토큰을 검증하고, 요청에 응답한다.
JWT의 구조
-
HEADER : 헤더에는 토큰의 종류와 SIGNATURE 생성을 위해서 어떤 알고리즘을 사용했는지가 명시되어 있음
-
PAYLOAD : 로그인한 유저임을 증명할 수 있는 기본적인 정보, 차후에 클라이언트가 다시 토큰을 보내면 해독해서 DB내의 유저 정보와 비교
-
SIGNATURE : 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드