JSON Web Tokens (JWT) é uma tecnologia padrão aberta (RFC 7519) que permite a troca segura de informações entre partes na forma de um objeto JSON. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente. JWTs podem ser assinados usando um segredo (com o algoritmo HMAC) ou um par de chaves pública/privada usando RSA ou ECDSA.
Em NodeJS, podemos usar pacotes como jsonwebtoken para trabalhar com JWTs. Neste tutorial, vamos explorar como gerar um JWT em NodeJS.
Instalação
Para começar, precisamos instalar o pacote jsonwebtoken. Você pode fazer isso usando o npm (Node Package Manager) com o seguinte comando:
npm install jsonwebtoken
Depois de instalado, você pode importá-lo em seu arquivo usando:
const jwt = require('jsonwebtoken');
Criação de um JWT
Para criar um JWT, usamos a função sign() do pacote jsonwebtoken. Esta função aceita três argumentos:
- O payload, que é um objeto JSON contendo as reivindicações. As reivindicações são declarações sobre uma entidade (geralmente o usuário) e informações adicionais.
- O segredo, que é uma string usada para assinar o token. Este segredo deve ser mantido em segurança e nunca deve ser exposto.
- As opções, que é um objeto contendo opções adicionais, como o algoritmo de assinatura e a validade do token.
Aqui está um exemplo:
const payload = { id: 1, name: 'John Doe', admin: true }; const secret = 's3cr3t'; const options = { expiresIn: '2h' }; const token = jwt.sign(payload, secret, options);
Neste exemplo, o payload contém três reivindicações: id, nome e admin. O segredo é 's3cr3t' e o token expira em 2 horas.
Verificação de um JWT
Depois de criar um JWT, você pode verificar sua assinatura e decodificar o payload usando a função verify() do pacote jsonwebtoken. Esta função aceita três argumentos:
- O token, que é a string JWT que você deseja verificar.
- O segredo, que é a mesma string usada para assinar o token.
- As opções, que é um objeto contendo opções adicionais, como o algoritmo de assinatura.
Aqui está um exemplo:
const decoded = jwt.verify(token, secret);
Neste exemplo, a função verify() retorna o payload decodificado se o token for válido. Se o token não for válido (por exemplo, se a assinatura não corresponder), a função lançará um erro.
Conclusão
Trabalhar com JWTs em NodeJS é simples e direto graças ao pacote jsonwebtoken. Este pacote fornece funções para criar e verificar JWTs, permitindo que você implemente autenticação e autorização seguras em suas aplicações NodeJS.
É importante lembrar que os JWTs são apenas tão seguros quanto o segredo usado para assiná-los. Portanto, certifique-se de manter seu segredo seguro e nunca expô-lo. Além disso, os JWTs são codificados, não criptografados, o que significa que qualquer pessoa que obtiver o token poderá decodificar o payload. Portanto, nunca coloque informações sensíveis no payload de um JWT.