[Web] JWT 란?

devMag 개발 블로그·2022년 1월 16일

Web 기본 개념

목록 보기
2/3

더 자세한 설명이 있는 블로그. 꼭 참고하세요.
velopert - [JWT] JSON Web Token 소개 및 구조
geunwoobaek - JWT란?
똑똑한 개발자 - JWT란 무엇인가

JWT (JSON Web Token) 이란?

JWT란 JSON Web Token의 약자로 웹 및 모바일에서 사용자 인증을 위해 사용되는 암호화된 토큰이다.


JWT의 구조

JSON Web Token1
JSON Web Token2

  • 토큰의 타입, 해시알고리즘 정보가 들어간다.
  • 헤더의 내용은 BASE64방식으로 인코딩해서 JWT의 가장 첫 부분에 기록된다.

PAYLOAD (내용)

  • Payload에는 exp와 같이 만료시간을 나타내는 공개 클레임클라이언트와 서버간 협의하에 사용하는 비공개 클레임. 이 두가지 요소를 조합하여 작성한 뒤, BASE64 인코딩하여 두번째 요소로 위치한다.
    • 예) {"user-id":1, "exp":1839247391}

SIGNATURE (서명)

  • JWT가 원본 그대로라는 걸 확인할 때 사용하는 부분이다.
  • 서명은 BASE64URL 인코드된 header와 payload 그리고 JWT secret(별도 생성) 을 헤더에 지정된 암호 알고리즘으로 암호화하여 전송한다. (복호화 가능)
  • 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화하여 서버에서 생성한 JWT가 맞는지 확인한다.
  • 계약서의 위변조를 막기위해 서로 사인하는 것과 같다고 보면 된다.
  • 주의할 점은 header와 payload는 BASE64 인코딩한 것이므로(암호화가 아님) 누구나 원본을 볼 수 있으니 개인정보를 담아서는 안된다.

JWT는 어떤 상황에 사용되나?

회원 인증

JWT를 사용하는 가장 자주 사용하는 상황. JWT를 이용해서 유저가 회원 정보를 주고받으면 유저 정보를 세션에 유지할 필요없이 이용할 수 있다.

정보 교류

JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다. 정보를 보낸이가 바뀌진 않았는지, 정보가 도중에 조작되지는 않았는지 검증할 수 있다.


JWT 사용과정

JWT flow1
JWT flow2

  1. Authentication 절차(회원가입, 로그인)를 통해 토큰을 생성한다. 토큰에는 유저 정보를 확인할 수 있는 정보가 들어가 있어야 한다. (user id 등)
  2. 서버는 클라이언트에게 토큰을 보낸다.
  3. 클라이언트는 토큰을 가지고 있다가 필요시 서버에게 데이터를 요청한다. 요청을 할 때는 토큰을 첨부해서 보낸다.
  4. 서버는 클라이언트가 보낸 요청과 같이 온 토큰을 복호화해서 유저의 정보를 얻고 db에서 유저의 권한을 확인한다.
  5. 권한에 따라 응답을 한다. Unauthorized Response(401) 혹은 다른 에러 코드를 보낸다.

이전에 사용하던 인증 / 인가 방식
session flow


JWT 장점 및 단점

JWT 장점

  1. 무상태 (stateless). 기존에 서버에 세션을 저장하는 방식이 필요하지 않아서 서버에 부담이 덜하다.
  2. 확장성. 토큰을 사용하면 다른 서비스도 권한이 부여가 되고 선택적인 권한 부여가 가능하다. (앱에 SNS 로그인은 가능하지만 특정 기능 수행 불가 등)
  3. 보안 쿠키를 전달하지 않아도 되서 쿠키를 사용하면서 발생하는 취약점이 사라진다.
  4. 토큰을 사용하면 여러 디바이스를 사용해도 토큰만 유효하다면 요청이 정상적으로 처리된다.

JWT 단점

  1. claim에 넣는 데이터가 많아지면 JWT 토큰이 길어질 수 있다. 길이가 길어진다는 건 API 호출시마다 네트워크 대역폭 낭비가 심해질 수 있다는 뜻이다.
  2. 기본적으로 Payload를 암호화하지 않고 BASE64 인코딩만 하기에 중간에 패킷을 가로채거나 다른 방식으로 토큰을 취득하면 디코딩을 통해서 데이터를 볼 수 있다. 그래서 따로 암호화하거나 중요데이터를 Payload에 넣지 말아야한다.
  3. 계정 차단 및 비활성화해야될 때 완전히 적용디려면 유효했던 토큰이 만료될 때까지 기다려야한다.
  4. 사용자가 비밀번호를 변경하면 사전에 인증을 했던 이전 비밀번호로 생성된 토큰은 만료 될 때까지 유효하다.
profile
최근 공부 내용 정리 Notion Link : https://western-hub-b8a.notion.site/Study-5f096d07f23b4676a294b2a2c62151b7

0개의 댓글