Como usar a reivindicação jti em um JWT
A especificação JWT menciona uma reivindicação jti que supostamente pode ser usada como um nonce para impedir ataques de repetição:
A declaração jti (ID do JWT) fornece um identificador exclusivo para o JWT. O valor do identificador DEVE ser atribuído de maneira a garantir que exista uma probabilidade insignificante de que o mesmo valor seja acidentalmente atribuído a um objeto de dados diferente; se o aplicativo usar vários emissores, colisões DEVEM ser evitadas entre os valores produzidos por diferentes emissores também. A reivindicação jti pode ser usada para impedir que o JWT seja reproduzido. O valor jti é uma sequência que diferencia maiúsculas de minúsculas. O uso desta reivindicação é OPCIONAL.
Minha pergunta é como eu implementaria isso? Preciso armazenar o jtis usado anteriormente e emitir um novo JWT a cada solicitação? Em caso afirmativo, isso não anula o objetivo das JWTs? Por que usar um JWT em vez de apenas armazenar um ID de sessão gerado aleatoriamente em um banco de dados?
Minha API REST possui um banco de dados mongo e não sou contra a adição de uma instância redis. Existe uma opção de autenticação melhor que a JWT? No entanto, eu principalmente não quero armazenar senhas no cliente, o que elimina a autenticação HTTP como uma opção. No entanto, à medida que estou me aprofundando nesse assunto do JWT, estou começando a sentir como se uma implementação de token personalizado ou um padrão diferente pudesse melhorar atender às minhas necessidades. Existem pacotes node / express para autenticação baseada em token que suportam revogação de token e tokens rotativos?
Gostaria de receber algum conselho.