오늘의 질문
JWT 특징과 주의 사항을 설명해주세요.

JWT (Json Web Token)

통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용된다. 일반적인 애플리케이션에서 JWT 는 주로 인증과 인가를 구현하기 위해 사용된다. JWT 는 토큰 자체에 정보가 저장되어 있는 클레임 기반 토큰이고, 헤더, 페이로드, 시그니처로 구분된다. 헤더는 토큰의 암호화 알고리즘이나 타입을 표시하며, 페이로드는 데이터를 가지고, 시그니처는 헤더와 페이로드가 변조되지 않았는지 판단하기 위해 사용된다.

JWT 는 stateless 하다는 특징이 있다. 즉 서버가 상태를 관리하지 않는다. 그 때문에 서버가 이중화된 환경에서도 사용자의 로그인 정보를 일관성 있게 관리할 수 있다. (세션 불일치 문제가 발생하지 않는다)


주의사항

  • JWT 탈취에 유의해야 한다. 이를 위해서 JWT 저장 공간, Refresh Token 도입 여부 등에 대해서 고민이 필요하다.

  • 토큰의 잦은 갱신이 사용자 경험을 저해하는지 고려해야 한다. 예를 들어 사용자가 게시글을 3시간동안 작성하고 제출했지만 JWT 가 만료되면 사용자가 작성한 글은 사라질 수 있다. 이를 해결하기 위해 슬라이딩 세션같은 전략을 고민해볼 수 있다.

  • JWT none 알고리즘 공격에 유의해야 한다. 공격자가 토큰의 헤더에 명시된 알고리즘을 none 으로 변경하여 시그니처 검증을 우회할 수 있다. 이를 해결하기 위해 none 알고리즘 공격을 예방한 라이브러리를 사용하거나 none 알고리즘과 같이 약한 알고리즘에 대해서 필터링하는 등 주의가 필요하다.


🔖 참고자료

매일메일