JSON Web Tokens, ou JWT, é um padrão de token de acesso que tem como objetivo tornar a comunicação entre duas partes (cliente e servidor, por exemplo) segura. JWT é uma maneira eficaz de lidar com a autenticação e autorização em aplicativos NodeJS. Neste capítulo do nosso curso, aprenderemos como proteger rotas com JWT em NodeJS.
Para começar, precisamos entender o que é JWT. JWT é uma string codificada que é passada entre o cliente e o servidor para validar a identidade do usuário e garantir que a informação transmitida seja segura. O token é composto por três partes: o cabeçalho, o payload e a assinatura.
O cabeçalho contém informações sobre o tipo do token e o algoritmo de criptografia usado. O payload contém as reivindicações ou dados que você deseja transmitir. A assinatura é usada para verificar se o remetente do JWT é quem diz ser e para garantir que o conteúdo não tenha sido alterado.
Para trabalhar com JWT em NodeJS, precisaremos da biblioteca jsonwebtoken. Para instalá-la, você pode usar o seguinte comando no terminal:
npm install jsonwebtoken
Uma vez instalada a biblioteca, podemos começar a criar tokens. Aqui está um exemplo de como você pode criar um token JWT em NodeJS:
const jwt = require('jsonwebtoken'); const data = { id: 1, name: 'John Doe' }; const secret = 'mysecretkey'; const token = jwt.sign(data, secret); console.log(token);
Neste exemplo, estamos criando um token JWT que contém os dados do usuário. A chave secreta 'mysecretkey' é usada para assinar o token.
Agora que temos um token, podemos usá-lo para proteger nossas rotas. Para fazer isso, precisamos criar um middleware que verificará a presença do token JWT em cada solicitação. Aqui está um exemplo de como você pode fazer isso:
const jwt = require('jsonwebtoken'); const secret = 'mysecretkey'; const authenticate = (req, res, next) => { const token = req.headers.authorization; if (!token) { return res.status(401).json({ message: 'No token provided' }); } jwt.verify(token, secret, (err, decoded) => { if (err) { return res.status(401).json({ message: 'Invalid token' }); } req.user = decoded; next(); }); }; app.use(authenticate);
Neste exemplo, o middleware 'authenticate' extrai o token do cabeçalho 'authorization' da solicitação. Se o token não estiver presente, a solicitação será rejeitada com um status 401. Se o token estiver presente, ele será verificado usando a função 'jwt.verify'. Se a verificação falhar, a solicitação será rejeitada com um status 401. Se a verificação for bem-sucedida, os dados decodificados do token serão anexados à solicitação e a solicitação será passada para o próximo middleware.
Com este middleware, podemos proteger qualquer rota simplesmente incluindo-o na cadeia de middleware da rota. Aqui está um exemplo:
app.get('/protected', authenticate, (req, res) => { res.json({ message: 'This is a protected route' }); });
Neste exemplo, a rota '/protected' só será acessível se a solicitação incluir um token JWT válido no cabeçalho 'authorization'.
Em resumo, JWT é uma maneira poderosa e flexível de lidar com autenticação e autorização em aplicativos NodeJS. Com a biblioteca jsonwebtoken, podemos facilmente criar e verificar tokens JWT, e com o conceito de middleware, podemos facilmente proteger nossas rotas. Espero que este capítulo tenha lhe dado uma boa compreensão de como trabalhar com JWT em NodeJS.
Na próxima seção, vamos aprofundar em outras técnicas de autenticação e autorização em NodeJS. Fique atento!