오늘의 질문
JWT 특징과 주의 사항을 설명해주세요.
JWT (Json Web Token)
통신 정보를 JSON 형식을 사용하여 안전하게 전송하기 위해 사용된다. 일반적인 애플리케이션에서 JWT 는 주로 인증과 인가를 구현하기 위해 사용된다. JWT 는 토큰 자체에 정보가 저장되어 있는 클레임 기반 토큰이고, 헤더, 페이로드, 시그니처로 구분된다. 헤더는 토큰의 암호화 알고리즘이나 타입을 표시하며, 페이로드는 데이터를 가지고, 시그니처는 헤더와 페이로드가 변조되지 않았는지 판단하기 위해 사용된다.
JWT 는 stateless 하다는 특징이 있다. 즉 서버가 상태를 관리하지 않는다. 그 때문에 서버가 이중화된 환경에서도 사용자의 로그인 정보를 일관성 있게 관리할 수 있다. (세션 불일치 문제가 발생하지 않는다)
주의사항
JWT 탈취에 유의해야 한다. 이를 위해서 JWT 저장 공간, Refresh Token 도입 여부 등에 대해서 고민이 필요하다.
토큰의 잦은 갱신이 사용자 경험을 저해하는지 고려해야 한다. 예를 들어 사용자가 게시글을 3시간동안 작성하고 제출했지만 JWT 가 만료되면 사용자가 작성한 글은 사라질 수 있다. 이를 해결하기 위해 슬라이딩 세션같은 전략을 고민해볼 수 있다.
JWT none 알고리즘 공격에 유의해야 한다. 공격자가 토큰의 헤더에 명시된 알고리즘을 none 으로 변경하여 시그니처 검증을 우회할 수 있다. 이를 해결하기 위해 none 알고리즘 공격을 예방한 라이브러리를 사용하거나 none 알고리즘과 같이 약한 알고리즘에 대해서 필터링하는 등 주의가 필요하다.
🔖 참고자료