7.12 Trabalhando com Rotas no ExpressJS: Trabalhando com Autenticação JWT nas Rotas
ExpressJS é uma estrutura de aplicação web para Node.js que fornece uma maneira robusta de criar servidores web e APIs. Um dos principais conceitos ao trabalhar com ExpressJS é o conceito de rotas. As rotas são o caminho que o servidor deve seguir para responder a uma solicitação específica do cliente.
Para proteger as rotas e garantir que apenas usuários autenticados possam acessá-las, podemos usar a autenticação JWT (JSON Web Token). JWT é um padrão (RFC 7519) que define uma maneira compacta e segura de transmitir informações entre partes como um objeto JSON. Essas informações podem ser verificadas e confiáveis porque são assinadas digitalmente.
Implementando a Autenticação JWT nas Rotas
Para implementar a autenticação JWT nas rotas do ExpressJS, primeiro precisamos instalar o pacote 'jsonwebtoken' usando o npm (Node Package Manager). O comando para instalar este pacote é 'npm install jsonwebtoken'.
Em seguida, precisamos criar um middleware que verifique o token JWT em cada solicitação. Um middleware é uma função que tem acesso ao objeto de solicitação (req), ao objeto de resposta (res) e à próxima função de middleware no ciclo de solicitação/resposta do aplicativo. A próxima função de middleware é comumente denotada por uma variável chamada 'next'.
Aqui está um exemplo de como um middleware de autenticação JWT pode ser:
const jwt = require('jsonwebtoken'); function authenticateToken(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (token == null) return res.sendStatus(401); // se não há token, retorna um erro 401 jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => { if (err) return res.sendStatus(403); // se o token é inválido, retorna um erro 403 req.user = user; next(); // passa a execução para o próximo middleware }); }
O middleware 'authenticateToken' extrai o token do cabeçalho de autorização da solicitação, verifica se o token está presente e, em seguida, verifica se o token é válido usando a função 'verify' do pacote 'jsonwebtoken'. Se o token for válido, ele adiciona o usuário ao objeto de solicitação e passa a execução para o próximo middleware.
Agora, para proteger uma rota com este middleware, tudo o que precisamos fazer é adicionar 'authenticateToken' como um argumento para a função de rota, como neste exemplo:
app.get('/protected', authenticateToken, (req, res) => { res.send('Esta é uma rota protegida'); });
Neste exemplo, a rota '/protected' só pode ser acessada se o cliente enviar um token JWT válido no cabeçalho de autorização da solicitação.
Conclusão
Trabalhar com rotas no ExpressJS é uma parte fundamental do desenvolvimento de APIs. A adição de autenticação JWT às rotas permite proteger certas partes da API e garantir que apenas usuários autenticados possam acessá-las. Embora a implementação da autenticação JWT possa parecer complexa no início, ela se torna bastante direta uma vez que você entende os conceitos básicos de como os tokens JWT e os middlewares funcionam.
Esperamos que este capítulo tenha fornecido uma visão clara de como trabalhar com rotas e autenticação JWT no ExpressJS. No próximo capítulo, vamos explorar mais recursos avançados do ExpressJS e como eles podem ser usados para criar APIs mais robustas e seguras.