sql >> Database >  >> NoSQL >> MongoDB

Moet ik JWT-tokens in redis opslaan?

TLDR:Als je de mogelijkheid wilt hebben om het token op een gegeven moment in te trekken, ja, sla het dan op in iets snels zoals Redis.

Een van de goed gedocumenteerde nadelen van het gebruik van JWT is dat er geen eenvoudige manier is om een ​​token in te trekken als bijvoorbeeld een gebruiker moet worden uitgelogd of het token is gecompromitteerd. Het intrekken van een token zou betekenen dat je het in een opslag moet opzoeken en vervolgens moet beslissen wat je vervolgens moet doen. Aangezien een van de punten van JWT is om retourvluchten naar de db te vermijden, zou een goed compromis zijn om het op te slaan in iets dat minder belastend is dan een rdbms. Dat is een perfecte baan voor Redis.

Zoals in de opmerkingen wordt gesuggereerd, is het een goede aanpak om van de lijst een zwarte lijst te maken (d.w.z. een lijst met ongeldige tokens). Bij elk verzoek zoek je de lijst op om er zeker van te zijn dat het token er niet in staat. U kunt de geheugenruimte en prestaties tijdens de opzoekstap verder verbeteren door een probabilistisch algoritme te gebruiken om het token op te slaan. Een eenvoudige benadering is om gelaagde zoekopdrachten te hebben. U kunt bijvoorbeeld een kleine in-app store hebben die alleen de eerste paar (bijv. 1 tot 4) bytes van uw op de zwarte lijst geplaatste tokens bijhoudt. Dan zou de redis-cache een iets completere versie van dezelfde tokens volgen (bijvoorbeeld de eerste 2 tot 8 bytes). U kunt dan een volledige versie van de tokens op de zwarte lijst opslaan met behulp van een meer persistente oplossing (bestandssysteem, rdbms, enz.). Dit is een optimistische opzoekstrategie die snel zal bevestigen dat een token niet op de zwarte lijst staat (wat het meest voorkomende geval is). Als een token dat wordt opgezocht, overeenkomt met een item in de zwarte lijst in de app (omdat de eerste paar bytes overeenkomen), ga dan verder met een extra zoekopdracht in de redis-winkel en vervolgens de permanente winkel indien nodig. Sommige (of alle) winkels kunnen worden geïmplementeerd als try- of hash-tabellen. Een andere efficiënte en relatief eenvoudig te implementeren datastructuur om te overwegen is iets dat een Bloom-filter wordt genoemd.

Het is duidelijk dat u de bovenstaande aanpak moet aanpassen als u routinematig miljoenen duurzame tokens op de zwarte lijst zet (wat er ook op kan wijzen dat u een ander probleem heeft).



  1. Kan MongoDB niet starten. FOUT:adres al in gebruik

  2. Kaart-Reduce-prestaties in MongoDb 2.2, 2.4 en 2.6

  3. Converteer MongoDB BsonDocument naar geldige JSON in C#

  4. MongoError:De 'cursor'-optie is vereist, behalve voor aggregatie met het argument explain