MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Dois-je stocker les jetons JWT dans redis ?

TLDR :Si vous souhaitez avoir la possibilité de révoquer le jeton à un moment donné, oui, stockez-le dans quelque chose de rapide comme Redis.

L'un des inconvénients bien documentés de l'utilisation de JWT est qu'il n'y a pas de moyen simple de révoquer un jeton si, par exemple, un utilisateur doit être déconnecté ou si le jeton a été compromis. Révoquer un jeton signifierait le rechercher dans un espace de stockage, puis décider quoi faire ensuite. Comme l'un des points du JWT est d'éviter les allers-retours vers la bd, un bon compromis serait de le stocker dans quelque chose de moins éprouvant qu'un rdbms. C'est un travail parfait pour Redis.

Comme suggéré dans les commentaires, une bonne approche consiste à faire de la liste une liste noire (c'est-à-dire une liste de jetons invalidés). À chaque demande, vous recherchez la liste pour vous assurer que le jeton n'y est pas présent. Vous pouvez encore améliorer l'espace mémoire et les performances lors de l'étape de recherche en utilisant un algorithme probabiliste pour stocker le jeton. Une approche simple consiste à avoir des recherches en couches. Par exemple, vous pourriez avoir une petite boutique intégrée qui ne suit que les premiers octets (par exemple, 1 à 4) de vos jetons sur liste noire. Ensuite, le cache Redis suivrait une version légèrement plus complète des mêmes jetons (par exemple, les 2 à 8 premiers octets). Vous pouvez ensuite stocker une version complète des jetons sur liste noire en utilisant une solution plus persistante (système de fichiers, rdbms, etc.). Il s'agit d'une stratégie de recherche optimiste qui confirmera rapidement qu'un jeton est absent de la liste noire (ce qui serait le cas le plus courant). Si un jeton recherché correspond à un élément de la liste noire intégrée à l'application (parce que ses premiers octets correspondent), passez à une recherche supplémentaire sur le magasin redis, puis le magasin persistant si nécessaire. Certains (ou tous) des magasins peuvent être implémentés sous forme d'essais ou de tables de hachage. Une autre structure de données efficace et relativement simple à prendre en compte est ce qu'on appelle un filtre Bloom.

Évidemment, vous devrez adapter l'approche ci-dessus si vous mettez régulièrement sur liste noire des millions de jetons durables (ce qui peut également indiquer que vous avez un problème différent).