programing

JWT 토큰을 redis에 저장해야 합니까?

starjava 2023. 5. 22. 20:05
반응형

JWT 토큰을 redis에 저장해야 합니까?

익스프레스로 애플리케이션을 만들고 있습니다.JS, Mongodb(Mogoose).응용프로그램에는 액세스하기 전에 사용자를 인증해야 하는 경로가 포함되어 있습니다.

현재 저는 이를 위해 빠른 미들웨어를 작성했습니다.여기 JWT 토큰의 도움으로 사용자 인증 여부를 확인하기 위해 mongodb 쿼리를 만들고 있습니다. 하지만 이것이 데이터베이스에 불필요한 요청 로드를 줄 수 있다고 느낍니다.

이 특정 작업을 위해 redis를 통합해야 합니까?
API 성능향 수킬있니까습 ?? 접근법을 ?아니면 기존의 mongodb 접근법을 계속해야 합니까?

더 많은 통찰력을 얻는다면 도움이 될 것입니다.

TLDR: JWT를 취소할 수 있는 기능이 필요한 경우 검색해야 합니다.그래서 네, 레디스와 같은 빠른 것이 그것에 유용할 수 있습니다.

JWT를 사용할 때의 잘 문서화된 단점 중 하나는 예를 들어 사용자가 로그아웃해야 하거나 토큰이 손상된 경우 토큰을 해지할 수 있는 간단한 방법이 없다는 것입니다.토큰을 취소하는 것은 일부 스토리지에서 토큰을 검색한 후 다음에 수행할 작업을 결정하는 것을 의미합니다.JWT의 요점 중 하나는 DB로의 왕복을 피하는 것이기 때문에 rdbms보다 부담이 적은 곳에 저장하는 것이 좋습니다.레디스한테 딱 맞는 일이네요

그러나 유효성을 위해 스토리지에서 토큰을 찾아야 하는 경우에도 상태 정보가 재도입되고 JWT의 주요 이점 중 일부가 무효화됩니다.이 단점을 완화하려면 목록을 블랙리스트(또는 차단 목록, 즉 잘못된 토큰 목록)로 만듭니다.토큰의 유효성을 검사하려면 목록에서 토큰을 검색하고 토큰이 없는지 확인합니다.검색 단계를 단계적으로 변경하여 공간 및 성능을 더욱 향상시킬 수 있습니다.예를 들어, 블랙리스트에 있는 토큰의 처음 2바이트 또는 3바이트만 추적하는 작은 앱 내 스토리지를 사용할 수 있습니다.그러면 rediscache는 동일한 토큰의 약간 큰 버전(예: 처음 4바이트 또는 5바이트)을 추적합니다.그런 다음 보다 지속적인 솔루션(파일 시스템, rdbms 등)을 사용하여 블랙리스트에 있는 토큰의 전체 버전을 저장할 수 있습니다.이는 토큰이 유효한지(더 일반적인 경우일 수 있음)를 신속하게 확인할 수 있는 낙관적인 검색 전략입니다.토큰이 앱 내 블랙리스트에 있는 항목과 일치하는 경우(처음 몇 바이트가 일치하기 때문에), 다시 저장소에서 추가 검색을 수행한 다음 필요한 경우 영구 저장소로 이동합니다.저장소의 일부(또는 전체)는 시도 또는 해시 테이블로 구현될 수 있습니다.또 다른 효율적이고 비교적 간단하게 구현할 수 있는 데이터 구조는 블룸 필터입니다.

해지된 토큰이 만료되면 정기적으로 상점에서 토큰을 제거할 수 있습니다.또한 토큰의 수명을 단축하여 블랙리스트를 짧고 쉽게 관리할 수 있습니다.

JWT는 취소가 예외인 시나리오에서 빛을 발합니다.수백만 개의 오래 지속되는 토큰을 정기적으로 블랙리스트에 올리는 경우 다른 문제가 있음을 나타낼 수 있습니다.

JWT 레이블을 저장하는 데 Redis를 사용할 수 있습니다.Redis는 이러한 데이터를 저장하는 데 훨씬 빠르고 편리합니다.Redis에 대한 요청이 성능에 큰 영향을 미치지 않아야 합니다.당신은 도서관 jwt-redis를 이용할 수 있습니다.

JWT에는 클레임이 포함되어 있습니다.session: guid와 같은 클레임을 저장하고 블랙리스트에 나열된 모든 키에 대해 redis로 집합을 유지할 수 있습니다.키는 jwt 유효 기간 동안 세트에 유지되어야 합니다.

당신의 api가 적중했을 때

  1. jwt 서명을 확인합니다.진정이 되면.
  2. 키 값 쌍 목록에서 클레임 추출
  3. 세션 키를 가져오고 블랙리스트에 있는 세트의 redis를 체크인
  4. 발견되면 중지하거나 계속합니다.

언급URL : https://stackoverflow.com/questions/44890564/should-i-store-jwt-tokens-in-redis

반응형