새소식

기타

개인 전문 분야 - JWT

  • -

JWT란

  • JSON Web Token의 약자로 모바일이나 웹의 사용자 인증을 위해 사용하는 암호화된 토큰을 의미한다.
  • JSON 객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안정성 있게 전달해주기 위한 토큰이다.
  • JWT 정보를 request에 담아 사용자의 정보 열람, 수정 등 개인적인 작업을 수행할 수 있게 한다.

JWT의 구성요소

  1. 헤더(header) : 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.
  2. 페이로드(payload) : 토큰에 담을 정보가 들어있다.
    • 이 곳에 담은 정보의 한 조각을 클레임(claim)이라 부르고(한 토큰에 여러 클레임을 담을 수 있다.) 이는 name/value 한 쌍으로 이루어져있다.
      • 클레임의 종류는 3가지로 등록된 클레임, 공개 클레임, 비공개 클레임이 있다.
  3. 서명(signature) : 토큰의 무결점을 검증하기 위한 값 / header와 payload, secret key로 구성된 문자열을 정해진 알고리즘으로 hashing하여 만들어진다.

JWT의 사용 목적

  • 회원인증 : 기존에 세션을 이용한 방식으로 인해 stateful했던 서버를 stateless하게 만들어준다.
    • stateful : 사용자와 서버의 동작, 상태를 기억하는 것
    • stateless : 이 전의 상태를 기억하지 않는 것
  • 정보교류 : 데이터를 주고 받을때 안정성 있게 진행할 수 있게 도와준다.

JWT의 작동 방식

  1. 사용자가 정상적으로 로그인을 시도하면, 서버로부터 access 토큰을 부여받는다.
  2. 이후 사용자가 모든 api 요청을 시도할때 access 토큰을 헤더에 포함하여 시도한다.
  3. 서버는 access 토큰을 검증하여 해당 api를 수행한다.
  4. 토큰의 기한이 만료 되면 서버는 사용자의 access 토큰을 삭제하고 재로그인을 요청한다.

JWT의 장점

  1. 사용자 인증에 필요한 모든 정보를 토큰 자체에 포함하기 때문에 서버에서 별도의 저장소가 필요하지 않다.
  2. stateless(무상태) : 확장성이 있다. / 토큰값만 있으면 자유롭게 서버에 접근할 수 있기 때문에 세션을 따로 저장하여 여러 서버에 분산하여 요청할 필요가 없다.
  3. 보안성 : 쿠키를 전달하지 않아 쿠키의 취약점이 사라진다.
  4. 호환성 : 여러 플랫폼 및 도메인 어플리케이션이 커지면 여러 디바이스를 호환시키고 많은 서비스를 제공하게 되는데 그 때 토큰값만으로 요청을 손쉽게 처리할 수 있다.

JWT의 단점

  1. 네트워크 : 클레임에 넣는 데이터가 많아질스록 JWT 토큰의 길이도 길어진다. API 호출 시 매 호출마다 토큰 데이터를 서버에 전달해야 하기 때문에 이 경우 네트워크 대역폭 낭비가 발생한다.
  2. 보안 : 기본적으로 정보가 담겨있는 payload를 암호화 하지않아 중간에 토큰을 다른 사용자가 취득하게 되면 해당 데이터를 볼 수 있게 된다. 그래서 이를 보완하기 위한 추가 작업이 필요하다.
  3. 제어 : 상태를 저장하지 않기 때문에 한 번 생성되면 제어가 불가능하다. 임의로 삭제하는 것이 불가능하여 만료시간을 꼭 넣어주어야만 한다.
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.