JSON Web Tokens (JWT) é um padrão aberto (RFC 7519) que define uma maneira compacta e autônoma de transmitir informações entre partes como 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.
Na criação de APIs em NodeJS, JWT desempenha um papel crucial na autenticação e autorização. Ele permite que os usuários se autentiquem, e uma vez autenticados, eles recebem um JWT. Este token é então usado para autorizar o usuário a acessar rotas, serviços e recursos que são permitidos com esse token. Isso torna o JWT uma ferramenta indispensável para a criação de APIs seguras.
A implementação do JWT em NodeJS é bastante direta, graças a pacotes como o jsonwebtoken. Para começar, você precisa instalar o pacote jsonwebtoken usando o npm.
npm install jsonwebtoken
Uma vez instalado, você pode importar o pacote em seu arquivo e começar a usá-lo para criar e verificar tokens.
const jwt = require('jsonwebtoken');
Para criar um token, você usa o método sign(). Este método aceita três argumentos: o payload, o segredo e as opções. O payload é o objeto que contém as reivindicações. As reivindicações são declarações sobre uma entidade (geralmente o usuário) e informações adicionais. O segredo é a chave secreta usada para assinar o token. As opções são usadas para definir outras propriedades do token, como o algoritmo de assinatura e a expiração do token.
let payload = {username: 'user'};
let secret = 'somesecretkey';
let token = jwt.sign(payload, secret, {expiresIn: '1h'});
Para verificar um token, você usa o método verify(). Este método aceita três argumentos: o token, o segredo e uma função de callback. A função de callback é chamada com o resultado da verificação.
jwt.verify(token, secret, function(err, decoded) {
if (err) {
console.log('Token verification failed');
} else {
console.log('Token verified successfully');
}
});
Uma coisa importante a notar é que você deve sempre proteger o segredo usado para assinar o token. Se alguém tiver acesso ao seu segredo, ele poderá assinar tokens por conta própria, o que pode levar a sérios problemas de segurança.
Além disso, você deve sempre verificar o token antes de permitir que o usuário acesse rotas, serviços ou recursos protegidos. Isso pode ser feito usando um middleware que verifica o token em cada solicitação.
function authenticateToken(req, res, next) {
const token = req.headers['authorization'];
if (token == null) return res.sendStatus(401);
jwt.verify(token, secret, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}
Em resumo, JWT é uma ferramenta poderosa para autenticação e autorização em APIs NodeJS. Ele permite que você crie tokens que podem ser usados para autenticar usuários e autorizá-los a acessar rotas, serviços e recursos. A implementação do JWT em NodeJS é simples graças a pacotes como o jsonwebtoken.