JSON Web Tokens (JWT) é uma maneira eficaz de garantir a segurança dos dados transmitidos entre o cliente e o servidor em uma aplicação NodeJS. JWT é um padrão (RFC-7519) que define uma maneira compacta e independente de transmitir informações com segurança entre as partes sob a forma de um objeto JSON. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente.
A revogação de um JWT é um aspecto crucial a ser considerado ao trabalhar com JWTs em NodeJS. A revogação é o processo de tornar um token JWT inútil ou inválido. Isso é necessário em várias situações, como quando um usuário faz logout, quando um token é roubado ou quando um token é usado de maneira inadequada.
Para revogar um JWT, você pode usar várias abordagens. Uma maneira comum é criar uma lista negra de tokens. Essa lista negra pode ser armazenada em um banco de dados ou em um cache, como Redis. Quando um usuário faz logout ou quando um token é considerado inseguro, você pode adicionar o token a esta lista negra. Em seguida, durante cada solicitação, você pode verificar se o token está na lista negra. Se estiver, você pode rejeitar a solicitação.
Outra abordagem é usar um token de atualização junto com o token de acesso. Neste caso, o token de acesso tem um tempo de vida muito curto, digamos 15 minutos. O token de atualização tem uma vida útil mais longa, digamos 24 horas. Quando o token de acesso expira, o cliente solicita um novo token de acesso usando o token de atualização. Se o token de atualização for revogado, o cliente não poderá obter um novo token de acesso.
Para implementar a revogação de JWT em NodeJS, você pode usar o pacote 'jsonwebtoken'. Primeiro, você precisa instalar o pacote usando o comando npm:
npm install jsonwebtoken
Depois de instalar o pacote, você pode usá-lo para criar e verificar tokens JWT. Aqui está um exemplo de como criar um token JWT:
const jwt = require('jsonwebtoken'); const payload = { userId: '123', }; const secret = 'my_secret_key'; const token = jwt.sign(payload, secret, { expiresIn: '1h' });
No exemplo acima, primeiro importamos o pacote 'jsonwebtoken'. Em seguida, criamos um payload que contém as informações que queremos incluir no token. Então, usamos a função 'sign' para criar o token. A função 'sign' recebe três argumentos: o payload, a chave secreta e as opções. As opções podem incluir a duração do token, que é definida para uma hora neste exemplo.
Para verificar e revogar um token, você pode fazer algo assim:
const jwt = require('jsonwebtoken'); const token = 'the_token_to_verify'; const secret = 'my_secret_key'; try { const decoded = jwt.verify(token, secret); // check if the token is in the blacklist if (isTokenInBlacklist(token)) { throw new Error('Token is revoked'); } console.log(decoded); } catch (err) { console.error(err.message); }
No exemplo acima, primeiro importamos o pacote 'jsonwebtoken'. Em seguida, definimos o token que queremos verificar e a chave secreta. Usamos a função 'verify' para verificar o token. Se o token for válido, a função 'verify' retorna o payload decodificado. Se o token for inválido, a função 'verify' lança um erro. Em seguida, verificamos se o token está na lista negra. Se estiver, lançamos um erro.
Trabalhar com JWTs em NodeJS é uma parte importante do desenvolvimento de aplicações seguras. A revogação de JWTs é um aspecto crucial a ser considerado, pois permite que você mantenha o controle sobre os tokens que estão em circulação. Ao implementar a revogação de JWTs, você pode garantir que os tokens inseguros ou não desejados sejam invalidados, melhorando a segurança de sua aplicação.