18.10. Trabalhando com JSON Web Tokens (JWT) em NodeJS

JSON Web Tokens (JWT) é um padrão aberto (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 digitalmente assinadas. JWTs podem ser assinados usando um segredo (com o algoritmo HMAC) ou um par de chaves pública/privada usando RSA ou ECDSA.

A autenticação baseada em JWT é uma maneira popular de realizar autenticação em aplicações web. Com a autenticação JWT, um token é armazenado no cliente, que é enviado em cada solicitação para o servidor para ser autenticado.

Como implementar a autenticação baseada em JWT em uma API NodeJS

Para implementar a autenticação baseada em JWT em uma API NodeJS, você precisará das seguintes etapas:

  1. Instalar o pacote jsonwebtoken
  2. Criar uma rota de login para gerar o token
  3. Verificar o token em cada solicitação

1. Instalar o pacote jsonwebtoken

Primeiro, você precisará instalar o pacote jsonwebtoken em seu projeto NodeJS. Você pode fazer isso usando o npm (Node Package Manager) com o seguinte comando:

npm install jsonwebtoken

2. Criar uma rota de login para gerar o token

Em seguida, você precisará criar uma rota de login que irá gerar o token JWT. Aqui está um exemplo de como você pode fazer isso:

const jwt = require('jsonwebtoken');
const express = require('express');
const app = express();

app.post('/login', (req, res) => {
    // Authenticate User

    const user = {
        id: 1, 
        username: 'test',
        email: 'test@test.com'
    }

    jwt.sign({user: user}, 'secretkey', (err, token) => {
        res.json({
            token: token
        });
    });
});

No exemplo acima, primeiro autenticamos o usuário. Em seguida, usamos a função jwt.sign para criar o token JWT. A função jwt.sign leva três parâmetros: a carga útil (neste caso, o objeto do usuário), a chave secreta e uma função de callback.

3. Verificar o token em cada solicitação

Finalmente, você precisará verificar o token JWT em cada solicitação. Você pode fazer isso criando um middleware que verifica o token:

function authenticateToken(req, res, next) {
    const bearerHeader = req.headers['authorization'];

    if (typeof bearerHeader !== 'undefined') {
        const bearer = bearerHeader.split(' ');
        const bearerToken = bearer[1];
        req.token = bearerToken;
        next();
    } else {
        res.sendStatus(403);
    }
}

app.get('/api', authenticateToken, (req, res) => {  
    jwt.verify(req.token, 'secretkey', (err, authData) => {
        if(err) {
            res.sendStatus(403);
        } else {
            res.json({
                message: 'API accessed successfully',
                authData
            });
        }
    });
});

No exemplo acima, o middleware authenticateToken verifica se o token JWT está presente no cabeçalho da autorização. Se o token estiver presente, ele é verificado usando a função jwt.verify. Se o token for válido, a solicitação é permitida para continuar. Se o token não for válido, um status de erro 403 (Proibido) é enviado.

E isso é tudo que você precisa para implementar a autenticação baseada em JWT em uma API NodeJS!

Agora responda o exercício sobre o conteúdo:

O que é necessário para implementar a autenticação baseada em JWT em uma API NodeJS?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Validação de dados com o pacote Joi 120

Próxima página do Ebook Gratuito:

Validação de dados com o pacote Joi

Tempo estimado de leitura: 5 minutos

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.

+ de 9 milhões
de alunos

Certificado grátis e
válido em todo o Brasil

60 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, ebooks e audiobooks