sql >> Database teknologi >  >> NoSQL >> MongoDB

Skal jeg gemme JWT-tokens i redis?

TLDR:Hvis du vil have muligheden for at tilbagekalde tokenet på et tidspunkt, ja, så gem det i noget hurtigt som Redis.

En af de veldokumenterede ulemper ved at bruge JWT er, at der ikke er nogen enkel måde at tilbagekalde et token på, hvis for eksempel en bruger skal logges ud, eller tokenet er blevet kompromitteret. At tilbagekalde et token ville betyde at slå det op i et eller andet lager og derefter beslutte, hvad der skal gøres. Da en af ​​pointerne med JWT er at undgå rundrejser til db'en, ville et godt kompromis være at gemme det i noget mindre belastende end en rdbms. Det er et perfekt job for Redis.

Som foreslået i kommentarerne er en god tilgang at gøre listen til en sortliste (dvs. en liste over ugyldige tokens). Ved hver anmodning slår du listen op for at sikre, at tokenet ikke er til stede i den. Du kan yderligere forbedre hukommelsesplads og ydeevne under opslagstrinnet ved at bruge en sandsynlighedsalgoritme til at gemme tokenet. En enkel tilgang er at have lagdelte opslag. For eksempel kan du have en lille butik i appen, der kun sporer de første par (f.eks. 1 til 4) bytes af dine sortlistede tokens. Så ville redis-cachen spore en lidt mere komplet version af de samme tokens (f.eks. de første 2 til 8 bytes). Du kan derefter gemme en fuld version af de sortlistede tokens ved hjælp af en mere persistent løsning (filsystem, rdbms osv.). Dette er en optimistisk opslagsstrategi, der hurtigt vil bekræfte, at et token er fraværende på sortlisten (hvilket ville være det mere almindelige tilfælde). Hvis et token, der bliver slået op, tilfældigvis matcher et element på sortlisten i appen (fordi dets første par bytes matcher), så gå videre til et ekstra opslag i redis-butikken og derefter den persistente butik, hvis det er nødvendigt. Nogle (eller alle) butikkerne kan implementeres som forsøg eller hashtabeller. En anden effektiv og relativt enkel at implementere datastruktur at overveje er noget, der kaldes et Bloom-filter.

Det er klart, at du bliver nødt til at tilpasse ovenstående tilgang, hvis du rutinemæssigt sortlister millioner af langtidsholdbare tokens (hvilket også kan indikere, at du har et andet problem).



  1. Mongo-aggregering med paginerede data og totaler

  2. Mongoose findByIdAndUpdate returnerer ikke korrekt model

  3. Hvordan implementerer man trigger for redis datastore?

  4. Hjælp med at definere et fantastisk MongoDB GUI-værktøj