본문 바로가기
넓고 얕은 웹 지식/보안

JWT(Json Web Token)

by 황원용 2022. 11. 22.
728x90

JWT(Json Web Token)

 데이터를 안전하고 간결하게 전송하기 위해 고안된 인터넷 표준 인증 방식으로 토큰 인증 방식에서 가장 범용적으로 사용된다. JSON 포맷의 토큰 정보를 인코딩 하여 그 정보를 Secret Key로 서명한 메시지를 Web Token으로써 인증 과정에 사용한다.

 

JWT의 종류

Access Token

  • 보호된 정보들에 접근할 수 있는 권한 부여에 사용
  • 비교적 짧은 유효 기간으로 탈취되더라도 오래 사용할 수 없게 한다.

Refresh Token

  • Access Token이 만료되었을 때 새로운 Access Token을 발급받을 수 있다.
  • 유효 기간이 길기 때문에 탈취당하면 큰 피해를 입을 수 있다. 그래서 사용하지 않는 곳이 많다.

 

JWT의 구조

Header.Payload.Signature의 구조로 이루어져 있다.

Header

  • 어떤 종류의 토큰인지, 어떤 알고리즘으로 Sign할 지 정의한다.
  • base64로 인코딩한다.

Payload

  • 서버에서 활용 가능한 사용자의 정보가 담겨있다.
  • base64로 인코딩하므로 쉽게 디코딩도 가능하기 때문에 민감한 정보는 포함하지 않는다.

Signature

  • 위 두 부분이 base64로 인코딩된 후 원하는 비밀키와 Header에서 지정한 알고리즘을 사용하여 Header와 Payload에 대한 단방향 암호화를 수행한다.

 

JWT의 장점

  • 상태를 유지하지 않고, 확장에 용이한 애플리케이션을 구현하기에 좋다.
  • 클라이언트가 request를 전송할 때마다 자격 증명 정보를 전송할 필요가 없다.
  • 인증을 담당하는 시스템을 다른 플랫폼으로 분리하는 것이 쉽다.
  • 권한 부여가 쉽다.

JWT의 단점

  • Payload의 디코딩이 쉽다.
  • 토큰의 길이가 길어지면 네트워크의 부하를 줄 수 있다.
  • 토큰이 자동 삭제되지 않는다.(만료 시간을 반드시 추가해야한다.)

 

728x90