Next-Squad/Interview-Question

[Network] JWT, 구조, 인증과정, 장단점

leezzangmin opened this issue · 1 comments

JWT, 구조, 인증과정, 장단점

1. JWT ?

JWT는 Json Web Token의 약자로, 쿠키-세션의 개념과 대비되는 무상태 토큰이다.
총 세 부분으로 나뉜다.

  • Header
  • Payload
  • Signature

스크린샷 2022-11-01 오후 3 25 27

- Header는 JWT 웹 토큰의 헤더 정보를 담고있다. 암호화에 사용할 알고리즘과 토큰의 타입을 나타내는 정보가 들어가있다.
  • Payload는 실제 토큰으로 사용하려는 데이터가 담기는 부분. 각 데이터를 Claim이라고 하며 다음과 같이 3가지 종류가 있다.

Reserved claims : 이미 예약된 Claim. 필수는 아니지만 사용하길 권장. key 는 모두 3자리 String이다.
Public claims : 공개 Claim.
Private claims : 사용자 정의 Claim

  • Signature 는 Header와 Payload의 데이터 무결성과 변조 방지를 위한 서명
    Header + Payload 를 합친 후, Secret 키와 함께 Header의 해싱 알고리즘으로 인코딩한다.

JWT 구조

JWT는 [Header Payload Signature] 각각 JSON 형태의 데이터를 base 64 인코딩 후 합친다.
아래와 같은 순서로 . 을 이용해 합친다.
최종적으로 만들어진 토큰은 HTTP 통신 간 이용되며, Authorization 이라는 key의 value로서 사용된다.

JWT 인증 과정

image

JWT 의 단점 & 도입시 고려사항

  1. Self-contained : 토큰 자체에 정보가 있다는 사실은 양날의 검이 될수 있다.
  • 토큰 길이 : 토큰 자체 payload 에 Claim set을 저장하기 때문에 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다.
  • payload 암호화 : payload 자체는 암호화 되지 않고 base64로 인코딩한 데이터다. 중간에 payload를 탈취하면 디코딩을 통해 테이터를 볼 수 있다.
    JWE 를 통해 암호하하거나, payload에 중요 데이터를 넣지 않아야 한다.
  1. Stateless : 무상태성이 때론 불편할 수 있다. 토큰은 한번 만들면 서버에서 제어가 불가능하다. 토큰을 임의로 삭제할 수 있는 방법이 없기 때문에 토큰 만료시간을 꼭 넣어주는게 좋다.
  2. tore Token : 토큰은 클라이언트 side에서 관리해야하기 때문에 토큰을 저장해야한다.

결론

HTTP, REST API 의 공통적인 특징은 Stateless(무상태)를 지향한다는 것이다.
Stateful, 즉 상태를 저장하는 서버는 많은 Side-effect를 발생시킬 수 있다.
또한, 서론에 말했듯이 현재의 IT 인프라 구조는 유연한 확장 가능성이 있어야 하는데 기존의 쿠키-세션 기반의 인증을 사용하면 확장 가능한 인프라를 구성하기 힘들다.
기존의 로그인 / 인증을 모두 Web Token 기반으로 변경할 수는 없지만, 앞으로 만들게 될 서비스 특히 RESTful한 API의 인증에는 JWT를 사용해보는 것이 좋을 것이라 생각한다.

실제 면접질문

  1. JWT에 대해 아는대로 설명하시오
  2. JWT가 변조하기 어려운 이유는?
  3. JWT가 유출되었을 때 회수하기가 쉽지 않은데 어떻게하면 발급된 JWT를 무효화할 수 있을까요?