스택큐힙리스트

JWT에서 jti 클레임을 사용하는 방법 본문

카테고리 없음

JWT에서 jti 클레임을 사용하는 방법

스택큐힙리스트 2023. 11. 29. 00:02
반응형

JWT 사양에는 리플레이 공격을 방지하기 위해 사용할 수 있는 jti 클레임이 언급되었습니다:



jii (JWT ID) 클레임은 JWT에 대한 고유 식별자를 제공합니다. 식별자 값은 JWT가 실수로 다른 데이터 객체에 할당되는 것을 방지하기 위해 보증되어야 합니다. 애플리케이션이 여러 발급자를 사용하는 경우, 서로 다른 발급자가 생성한 값들 사이에서 충돌을 반드시 방지해야 합니다. jti 클레임은 JWT의 재생을 방지하는 데 사용될 수 있습니다. jti 값은 대소문자를 구분하는 문자열입니다. 이 클레임의 사용은 선택 사항입니다.


저의 질문은, 이를 어떻게 구현할 수 있을까요? 이전에 사용된 JTIs를 저장하고 모든 요청마다 새로운 JWT를 발급해야 할 필요가 있는 건가요? 그렇다면, 이는 JWT의 목적을 달성하는 게 아닌가요? 왜 데이터베이스에 무작위로 생성된 세션 ID를 저장하는 대신에 JWT를 사용하는 건가요?


저의 REST API는 몽고 데이터베이스를 가지고 있고 Redis 인스턴스를 추가하는 것에는 반대하지 않습니다. JWT보다 더 나은 인증 옵션이 있을까요? 주로 클라이언트에 비밀번호를 저장하지 않으려고 하기 때문에 HTTP 인증은 옵션에서 제외합니다. 그러나 JWT에 대해 더 깊게 알아갈수록 제 요구 사항에 더 적합한 사용자 지정 토큰 구현이나 다른 표준이 좋을 것 같습니다. 토큰 기반 인증을 지원하며 토큰 폐기 및 토큰 회전을 지원하는 node/express 패키지가 있을까요?


어떠한 조언도 감사히 받겠습니다.

답변 1

실제로, 모든 발급된 JWT ID를 저장하는 것은 JWT를 사용하는 상태 무상태성을 약화시킵니다. 그러나 JWT ID의 목적은 이전에 발급된 JWT를 취소할 수 있도록하기 위함입니다. 이것은 화이트리스트 대신 블랙리스트를 사용하여 가장 쉽게 달성할 수 있습니다. exp 클레임을 포함했다면 (포함하는 것이 좋습니다), 블랙리스트에 있는 JWT가 자연스럽게 만료되는 동안 해당 JWT를 정리할 수 있습니다. 물론 iat 및 aud의 조합을 기반으로 한 특정 클라이언트의 모든 토큰을 취소하는 기타 폐지 옵션을 추가로 구현할 수도 있습니다.

답변 2

JWT는 JSON 웹 토큰의 약자로서, 웹 기반의 통신에 사용되는 인증과 권한 부여를 위한 토큰입니다. 이 토큰은 클라이언트와 서버 간의 안전한 인증을 위한 표준 방법을 제공하는데, 이를 가능하게 해주는 구성 요소 중 하나가 jti 클레임입니다.
jti 클레임은 JWT의 중요한 부분 중 하나로, JWT의 고유 식별자 역할을 합니다. 이 클레임은 토큰의 일련번호로서, JWT를 유니크하게 식별하고 구별하는 역할을 합니다. 이를 통해 서버는 각각의 토큰을 식별하고 추적할 수 있으며, 필요한 경우에 특정 토큰을 무효화할 수 있습니다.
jti 클레임의 사용은 JWT의 보안성과 안정성을 높이는 데 기여합니다. 예를 들어, 한 서버에서 여러 사용자에게 발급된 토큰이 있다고 가정해봅시다. 이러한 경우, 각각의 토큰은 서로 다른 jti 클레임 값을 갖게 됩니다. 따라서 서버는 클라이언트가 전송한 토큰의 jti 값을 확인하여 해당 토큰이 유효하고 중복되지 않음을 확인할 수 있습니다.
jti 클레임은 토큰을 생성하는 시점에 서버에서 발급되며, 일반적으로 UUID(Universally Unique Identifier)를 사용하여 고유한 값을 만듭니다. 서버는 토큰을 발급할 때마다 jti 값을 설정하여 토큰의 유일성을 보장해야 합니다. 이를 통해 특정 토큰을 식별하고 그에 따른 작업을 수행할 수 있습니다.
하지만 jti 클레임의 사용에는 몇 가지 고려할 사항이 있습니다. 첫째, 클레임의 값은 서버와 클라이언트 간의 통신을 위해 전달되므로, 전송 내용이 노출되지 않도록 암호화되어야 합니다. 둘째, jti 클레임은 토큰의 크기를 늘릴 수 있으므로, 이를 고려하여 최적의 설정을 선택해야 합니다.
요약하면, jti 클레임은 JWT에서 중요한 역할을 하는 요소입니다. 이를 사용하여 서버는 JWT를 고유하게 식별하고 관리할 수 있으며, 보안성을 강화할 수 있습니다. 그러나 jti 클레임의 사용에는 주의가 필요하며, 암호화와 성능 최적화를 고려하여 설정해야 합니다. 이를 통해 안전하고 효율적인 웹 기반 통신을 구현할 수 있습니다.
키워드: JWT, jti 클레임, 웹 토큰, 인증, 권한 부여, 보안, 고유 식별자, 유니크, 안정성, 암호화

반응형
Comments