MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy powinienem przechowywać tokeny JWT w redis?

TLDR:Jeśli chcesz mieć możliwość unieważnienia tokena w pewnym momencie, tak, przechowuj go w czymś szybkim, takim jak Redis.

Jedną z dobrze udokumentowanych wad używania JWT jest to, że nie ma prostego sposobu na unieważnienie tokena, jeśli na przykład użytkownik musi się wylogować lub token został naruszony. Unieważnienie tokena oznaczałoby wyszukanie go w jakimś magazynie, a następnie podjęcie decyzji, co dalej. Ponieważ jednym z punktów JWT jest unikanie podróży w obie strony do bazy danych, dobrym kompromisem byłoby przechowywanie go w czymś mniej obciążającym niż rdbms. To idealna praca dla Redis.

Jak zasugerowano w komentarzach, dobrym rozwiązaniem jest uczynienie listy czarną listą (tj. listą unieważnionych tokenów). Przy każdym żądaniu sprawdzasz listę, aby upewnić się, że nie ma na niej tokena. Możesz jeszcze bardziej zwiększyć ilość miejsca w pamięci i wydajność podczas kroku wyszukiwania, używając algorytmu probabilistycznego do przechowywania tokenu. Prostym podejściem jest posiadanie odnośników warstwowych. Na przykład możesz mieć mały sklep z aplikacjami, który śledzi tylko kilka pierwszych (np. 1 do 4) bajtów tokenów umieszczonych na czarnej liście. Następnie pamięć podręczna redis śledziłaby nieco bardziej kompletną wersję tych samych tokenów (np. pierwsze 2 do 8 bajtów). Następnie możesz przechowywać pełną wersję tokenów na czarnej liście, używając bardziej trwałego rozwiązania (system plików, rdbms itp.). Jest to optymistyczna strategia wyszukiwania, która szybko potwierdzi, że token nie znajduje się na czarnej liście (co byłoby częstszym przypadkiem). Jeśli wyszukiwany token pasuje do elementu na czarnej liście w aplikacji (ponieważ jego pierwsze kilka bajtów jest zgodnych), przejdź do dodatkowego wyszukiwania w sklepie redis, a następnie w sklepie trwałym, jeśli zajdzie taka potrzeba. Niektóre (lub wszystkie) sklepy mogą być zaimplementowane jako tablice prób lub tablice mieszające. Inną wydajną i stosunkowo prostą w implementacji strukturą danych do rozważenia jest coś, co nazywa się filtrem Blooma.

Oczywiście będziesz musiał dostosować powyższe podejście, jeśli rutynowo umieszczasz na czarnej liście miliony długotrwałych tokenów (co może również wskazywać, że masz inny problem).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wykonywanie Mongo jak Query (JSON) przez Javę

  2. Konfigurowanie uwierzytelniania MongoDB-CR jako domyślnego w MongoDB 3.x

  3. Pobrać _id wstawionego dokumentu w MongoDB?

  4. Jak monitorować MongoDB za pomocą Prometheus i ClusterControl

  5. Uwierzytelnianie MongoDB 3.2 nie powiodło się