• URL-Safe Json 포맷을 이용하여 유저에 대한 속성을 저장하는 Claim 기반의 Web Token 이에요.

    URL-Safe : URL로 이용될 수 있는 문자로만 구성(=, +, / 제외)
    Claim 기반 : 토큰 자체가 유저에 대한 정보를 담고 있는 방식. 랜덤 스트링 방식과 대비됨.
    
  • Request Header에 다음과 같은 형식으로 전달되어 사용 "Authorization":"xxxxxx.yyyyyyy.zzzzzzz"

  • 장점

    • 사용자 인증에 필요한 모든 정보가 토큰에 포함
      • 별도의 인증 저장소 필요 X
      • 트래픽 부담 감소
      • 마이크로서비스 자체에서 유효성 검사
    • 정보가 서명되어있고, 세션을 유지할 필요가 없어 쿠키 이용 X ⇒ 안정성 증가
    • JSON 객체를 통해 스스로 무결성을 입증할 수 있음
  • 단점 / 생각해볼 것

    • 클라이언트에 토큰이 저장되므로, 다른 서비스에서 사용자의 DB 정보 조작시 토큰에 직접 적용 불가
      • JWT에는 인증에 필요한 constant한 값만 담고, 결국 갱신이 필요한 자료는 계속해서 DB를 참조하게 될 것 같아요. 많은 정보가 담기면 토큰이 너무 커지는 문제도 생각해볼 수 있어요.
      • 서버가 토큰의 상태를 갖지 않으므로 (로그아웃 등의 상황에) 토큰을 강제로 만료시킬 방법이 없어요. 이 때 하이재킹되면 문제가 되는데, 이에 대한 보완점을 생각해보아야 할 것 같아요.
    • 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있음
    • Go의 경우는 어떨지 모르겠는데, 일부 JWT 라이브러리에서 공격자가 해싱 알고리즘을 none으로 변조시 토큰을 valid하다고 판단하는 경우가 있다고 해요. 참조
  • 토큰 구성