코딩하는 개굴이

JWT 토큰 인증이란? 본문

기본기 채우기

JWT 토큰 인증이란?

개굴이모자 2022. 9. 16. 21:23
반응형

JWT 토큰 인증이란?

JWT 토큰 인증은 유저를 인증/식별하기 위한 토큰 기반 인증으로, 토큰은 세션과 달리 서버가 아닌 클라이언트에 저장되어 메모리나 스토리지 등으로 세션을 관리했던 서버의 부담을 덜 수 있다.

 

토큰 자체에는 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함된다. 데이터가 많아지면 토큰이 커질 수 있으며 토큰이 한 번 발급 된 이후 사용자의 정보를 바꾸더라도 토큰을 재발급하지 않는 이상 반영되지 않는다.

 

JWT를 사용하면 RESTful 과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고 받을 수 있게 된다. 세션을 사용하게 될 경우 서버에 세션을 저장하였지만 JWT와 같은 토큰을 클라이언트에 저장하고 요청 시 단순히 HTTP 헤더에 토큰을 첨부하는 것으로 단순하게 데이터를 요청하고 받아올 수 있다.

Stateless 란? Stateless 는 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜로, 통신이 독립적인 쌍의 요청과 응답을 이룰 수 있도록 하는 방식이다. 서버가 복수의 요청 시간대에 각각의 통신 파트너에 대한 세션 정보나 상태 보관을 요구하지 않는다. 

간단히 말하면 서버에 세션 상태를 저장하지 않는 것으로, stateless 구조에서 server는 단순히 요청이 오면 response를 보내는 역할을 수행하며 세션의 관리는 client 에게 책임이 있다.

 

순서는 다음과 같다.

  1. 클라이언트 사용자가 아이디/패스워드로 웹서비스 인증
  2. 서버에서 서명된 JWT를 생성하여 클라이언트에 응답으로 돌려준다.
  3. 클라이언트가 서버에 데이터를 추가적으로 요구할 때 JWT를 HTTP Header에 첨부하여 서버에 요청을 보낸다.
  4. 서버는 클라이언트로부터 온 JWT를 검증하고 응답을 보낸다.

 

JWT는 Header, Payload, Signature 로 구성되어 헤더에는 JWT에서 사용할 타입과 해시 알고리즘의 종류가 담겨있다. 페이로드는 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있다.

 

Signature 에는 Header와 Payload는 base64 인코딩을 한 후 헤더에 명시된 해시 함수를 적용하고 private key 로 서명한 전자 서명이 담겨있다.

 

 

[사용]

  • 인증 : 사용자가 로그인을 한 후 서버는 사용자의 정보를 기반으로한 토큰을 발급하여 서버에 요청이 있을 때마다 JWT를 포함하여 사용자는 전달하고 서버는 요청을 받을 때마다 해당 토큰이 유효하고 인증됐는지/권한이 있는지 확인하며 작업을 처리. (세션의 역할)
  • 정보 교류 : 구 개체 사이의 안정성 있는 정보 교환을 위해 검증의 수단으로 사용을 수행

 

[장점]

  • JWT 는 최근 웹서비스들에서 범용적으로 사용되고 있으며 규격이 정해져있으므로 여러 클라이언트들에서 호환성이 뛰어나다.
  • RESTful 과 같은 무상태 환경에서의 통신이 용이하고 사용하기 쉽다.
  • 데이터를 자체적으로 가지고 있어서 데이터를 얻기 위해 타 서비스에 요청하는 횟수가 줄어들어 서버의 부담이 적다.

[단점]

  • Payload 가 많아지면 토큰이 커져서 서버의 부담이 커질 수 있으며 토큰이 재발급되기 전까지 사용자 정보가 갱신되더라도 적용이 되지 않을 수 있다.
  • 토큰의 만료 시간이 있는 경우 만료 시간까지는 강제적으로 만료시킬 수 없으므로 노출이 되어서는 안되고 중요한 정보를 넣어서는 안된다.

 

 

참고 링크

 

반응형
Comments