JSON Web Tokens (JWT) é uma maneira popular de adicionar autenticação e autorização a aplicativos da web e móveis. Em NodeJS, você pode usar o pacote jsonwebtoken para criar, verificar e decodificar tokens JWT. Nesta seção, exploraremos como trabalhar com JWTs em NodeJS e como adicionar informações extras a um token JWT.

Primeiramente, é importante entender o que é um JWT. Um JWT é uma representação compacta e segura de uma série de reivindicações que podem ser trocadas entre duas partes. As reivindicações são informações que você deseja transmitir de forma segura entre as partes. Um token JWT consiste em três partes: um cabeçalho, um payload e uma assinatura.

O cabeçalho geralmente contém duas partes: o tipo do token, que é JWT, e o algoritmo de assinatura, como HMAC SHA256 ou RSA. O payload contém as reivindicações que você deseja transmitir. As reivindicações podem ser declarações sobre uma entidade (geralmente o usuário) e dados adicionais. A assinatura é usada para verificar se o remetente do JWT é quem diz ser e para garantir que a mensagem não foi alterada ao longo do caminho.

Para começar a trabalhar com JWTs em NodeJS, você precisará instalar o pacote jsonwebtoken. Você pode fazer isso usando o npm, o gerenciador de pacotes NodeJS, com o comando: npm install jsonwebtoken.

Uma vez instalado, você pode importar o pacote jsonwebtoken em seu código com o seguinte comando: const jwt = require('jsonwebtoken').

Para criar um token JWT, você pode usar o método jwt.sign(). Este método aceita três argumentos: o payload, uma chave secreta e um objeto de opções. O payload é o conjunto de reivindicações que você deseja incluir no token. A chave secreta é usada para assinar o token e garantir sua integridade. O objeto de opções pode incluir várias opções, como o algoritmo de assinatura a ser usado e a vida útil do token.

Por exemplo, você pode criar um token JWT com as seguintes reivindicações: usuário ID e nome do usuário, da seguinte maneira:

let payload = {
    userId: '123',
    userName: 'John Doe'
};

let secretKey = 'mySecretKey';

let options = {
    algorithm: 'HS256',
    expiresIn: '1h'
};

let token = jwt.sign(payload, secretKey, options);

O token resultante será uma string que você pode transmitir para o cliente. O cliente pode então usar este token para autenticar solicitações subsequentes.

Para adicionar informações extras a um token JWT, você pode simplesmente adicionar mais propriedades ao objeto payload. Por exemplo, se você quiser adicionar o e-mail do usuário e o papel do usuário, você pode fazer o seguinte:

let payload = {
    userId: '123',
    userName: 'John Doe',
    userEmail: 'john.doe@example.com',
    userRole: 'admin'
};

let token = jwt.sign(payload, secretKey, options);

Essas informações extras serão incluídas no token JWT e podem ser usadas para tomar decisões de autorização no servidor. Por exemplo, você pode verificar o papel do usuário para determinar se ele tem permissão para acessar um recurso específico.

Para verificar um token JWT e extrair as reivindicações, você pode usar o método jwt.verify(). Este método aceita três argumentos: o token, a chave secreta e um objeto de opções. O método retorna o payload se o token for válido e lança um erro se o token for inválido ou expirado.

Por exemplo, você pode verificar um token e extrair as reivindicações da seguinte maneira:

let token = '...'; // o token JWT recebido do cliente

try {
    let payload = jwt.verify(token, secretKey);
    console.log(payload);
} catch (err) {
    console.log('Token inválido ou expirado');
}

O objeto payload resultante conterá todas as reivindicações que você incluiu ao criar o token, incluindo as informações extras que você adicionou.

Em resumo, os JWTs são uma maneira poderosa e flexível de adicionar autenticação e autorização a seus aplicativos NodeJS. Você pode incluir qualquer informação que desejar no token, desde que esteja ciente de que as informações no token podem ser lidas por qualquer pessoa que possua o token. Portanto, você deve evitar incluir informações sensíveis no token, a menos que o token seja criptografado.

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

O que é um JSON Web Token (JWT) e como ele é usado em NodeJS?

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

Você errou! Tente novamente.

Imagem do artigo Trabalhando com JSON Web Tokens (JWT) em NodeJS: Como revogar um JWT 117

Próxima página do Ebook Gratuito:

Trabalhando com JSON Web Tokens (JWT) em NodeJS: Como revogar um JWT

Tempo estimado de leitura: 4 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