sql >> Databasteknik >  >> NoSQL >> MongoDB

Ska jag lagra JWT-tokens i redis?

TLDR:Om du vill ha möjligheten att återkalla token någon gång, ja, lagra den i något snabbt som Redis.

En av de väldokumenterade nackdelarna med att använda JWT är att det inte finns något enkelt sätt att återkalla en token om till exempel en användare behöver loggas ut eller om token har äventyrats. Att återkalla en token skulle innebära att man skulle leta upp den i någon förvaring och sedan bestämma vad man ska göra härnäst. Eftersom en av poängerna med JWT är att undvika rundresor till db, skulle en bra kompromiss vara att lagra den i något mindre belastande än en rdbms. Det är ett perfekt jobb för Redis.

Som föreslås i kommentarerna är ett bra tillvägagångssätt att göra listan till en svartlista (dvs en lista över ogiltiga tokens). Vid varje begäran slår du upp listan för att säkerställa att token inte finns i den. Du kan ytterligare förbättra minnesutrymmet och prestanda under uppslagssteget genom att använda en probabilistisk algoritm för att lagra token. Ett enkelt tillvägagångssätt är att ha lageruppslagningar. Till exempel kan du ha en liten butik i appen som bara spårar de första (t.ex. 1 till 4) byten av dina svartlistade tokens. Sedan skulle redis-cachen spåra en något mer komplett version av samma tokens (t.ex. första 2 till 8 byte). Du kan sedan lagra en fullständig version av de svartlistade tokens med en mer beständig lösning (filsystem, rdbms, etc). Detta är en optimistisk uppslagsstrategi som snabbt kommer att bekräfta att en token saknas från den svarta listan (vilket skulle vara det vanligaste fallet). Om en token som slås upp råkar matcha ett objekt i appens svarta lista (eftersom dess första byte matchar), gå sedan vidare till en extra uppslagning på redis-butiken, sedan den persistenta butiken om det behövs. Vissa (eller alla) butikerna kan implementeras som försök eller hashtabeller. En annan effektiv och relativt enkel att implementera datastruktur att överväga är något som kallas Bloom-filter.

Självklart måste du anpassa metoden ovan om du rutinmässigt svartlistar miljontals långvariga tokens (vilket också kan indikera att du har ett annat problem).



  1. The ABCs of NestJS:En nybörjarguide med MongoDB(Mongoose).

  2. MongoDB - Uppdatera eller infoga objekt i array

  3. Kapslade arrayer i Mongoose

  4. Redis :Hur kan jag sortera min hash efter nycklar?