JWT 공부

youngseo·2022년 11월 1일
0

개발상식

목록 보기
6/6

JWT

JWT란 Json Web Token의 약자로, 모바일이나 웹의 사용자인증을 위해 사용하는 암호화된 토큰을 의미한다. JWT정보를 request에 담아 사용자의 정보를 열람, 수정 하는 등의 작업을 수행할 수 있다.

기존의 서버 기반 인증 시스템에서는 서버측에서 유저들의 정보를 세션에 기억하고 있어야 했기에, 세션을 유지하기 위해 메모리/디스크/데이터베이스 시스템에 이를 담아두고 있어야했다.

하지만 토큰 기반 시스템의 경우 Client가 해당 토큰 정보를 보관하며, 유저의 인증정보를 서버나 세션에 담아두지 않고 사용한다. 따라서 서버에 담아둠으로써 발생하는 많은 문제점들을 해소할 수 있다.

장점과 단점

장점

  • 무상태(stateless), 확장성

    • 기존 서버에 세션을 저장하는 방식에서 서버 여러대를 사용하여 요청을 분산하였다면 어떤 유저가 로그인했을 때 그 유저는 처음 로그인한 서버에만 요청을 내보내도록 설정해야했다. 반면 토큰을 사용하면 토큰 값만 알고 있다면 어떤 서버로 요청이 들어가던 상관이 없다. 즉, 세션스토리지가 필요없다.
      -> 다른 도메인이나, 어플리케이션간 이동이 발생해도 같은 JWT을 사용할 수 있다.
  • 보안성

    • 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이이 개선된다.
  • 불필요한 인증 과정의 감소

    • 여러 플랫폼 및 도메인 어플리케이션 규모가 커지면 여러 디바이스를 호환 시키고 더 많은 종류의 서비스를 제공한다. 하지만 JWT를 사용하면 사용자와 관련된 정보를 Auth서버에 매번 요청할 필요가 없다.
  • HTTPS사용의 강제성

    • Authorization Header에 JWT를 담아서 보내기 위해서는 HTTPS를 사용해야한다.

단점

  • claim이 많아질수록 JWT토큰이 길어진다. 매 호출때마다 토큰 데이터를 서버에 전달하는데, 길이가 길어질수록 네트워크 대역폭 낭비가 심해질 수 있다.

  • JWT는 기본적으로 Payload에 대한 정보를 암호화 하고 base64엔코딩만 하기 때문에 중간에 패킷을 가로채거나 토큰을 취득하게 되면, 디코딩을 통해 데이터를 볼 수 있다. 따라서 JWE를 통해 암호화 하거나 중요한 데이터를 payload에 넣지 말아야한다.


https://etloveguitar.tistory.com/101
https://tech.toktokhan.dev/

0개의 댓글