MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Devo armazenar tokens JWT em redis?


TLDR:Se você deseja a capacidade de revogar o token em algum momento, sim, armazene-o em algo rápido como o Redis.

Uma das desvantagens bem documentadas do uso do JWT é que não há uma maneira simples de revogar um token se, por exemplo, um usuário precisar ser desconectado ou o token tiver sido comprometido. Revogar um token significaria procurá-lo em algum armazenamento e depois decidir o que fazer a seguir. Como um dos pontos do JWT é evitar idas e voltas ao db, um bom compromisso seria armazená-lo em algo menos desgastante que um rdbms. Esse é um trabalho perfeito para o Redis.

Conforme sugerido nos comentários, uma boa abordagem é tornar a lista uma lista negra (ou seja, uma lista de tokens invalidados). A cada solicitação, você consulta a lista para garantir que o token não esteja presente nela. Você pode melhorar ainda mais o espaço de memória e o desempenho durante a etapa de pesquisa usando um algoritmo probabilístico para armazenar o token. Uma abordagem simples é ter pesquisas em camadas. Por exemplo, você pode ter uma pequena loja no aplicativo que rastreie apenas os primeiros bytes (por exemplo, 1 a 4) de seus tokens na lista negra. Em seguida, o cache redis rastrearia uma versão um pouco mais completa dos mesmos tokens (por exemplo, primeiros 2 a 8 bytes). Você pode então armazenar uma versão completa dos tokens na lista negra usando uma solução mais persistente (sistema de arquivos, rdbms, etc). Essa é uma estratégia de pesquisa otimista que confirmará rapidamente que um token está ausente da lista negra (o que seria o caso mais comum). Se um token que está sendo pesquisado corresponder a um item na lista negra do aplicativo (porque seus primeiros bytes correspondem), vá para uma pesquisa extra no armazenamento redis e, em seguida, no armazenamento persistente, se necessário. Algumas (ou todas) das lojas podem ser implementadas como tabelas de tentativas ou hash. Outra estrutura de dados eficiente e relativamente simples de implementar a considerar é algo chamado filtro Bloom.

Obviamente, você teria que adaptar a abordagem acima se colocar rotineiramente na lista negra milhões de tokens de longa duração (o que também pode indicar que você tem um problema diferente).