JSON Web Tokens (JWT) são uma maneira eficaz de gerenciar a autenticação e autorização em aplicativos Node.js. JWTs são tokens criptografados que contêm informações sobre o usuário que pode ser verificado para garantir que as solicitações sejam provenientes de uma fonte confiável. Neste capítulo, vamos discutir como lidar com os refresh tokens em NodeJS.

Os refresh tokens desempenham um papel crucial na manutenção da segurança do usuário e na redução da necessidade de o usuário fazer login repetidamente. Um refresh token é um tipo especial de token usado para obter um novo access token. Ele tem um tempo de vida mais longo que o access token, permitindo que os usuários permaneçam autenticados sem precisar inserir suas credenciais novamente.

Para começar a trabalhar com JWT e refresh tokens, primeiro precisamos instalar a biblioteca jsonwebtoken. No terminal, execute o seguinte comando:

npm install jsonwebtoken

Uma vez instalada a biblioteca, você pode criar tokens usando o método sign(). Este método aceita três argumentos: o payload, a chave secreta e as opções. O payload contém as informações do usuário, a chave secreta é usada para assinar e verificar o token, e as opções podem incluir coisas como o algoritmo de assinatura e a validade do token.

const jwt = require('jsonwebtoken'); const payload = { userId: user.id }; const secret = 'your-secret-key'; const options = { expiresIn: '1h' }; const token = jwt.sign(payload, secret, options);

Agora que temos nosso token, podemos enviar isso ao cliente para que eles possam usá-lo em solicitações subsequentes. Quando o cliente envia uma solicitação com um token, podemos usar o método verify() para garantir que o token seja válido.

const token = req.headers.authorization; try { const decoded = jwt.verify(token, 'your-secret-key'); req.user = decoded; } catch(err) { res.status(401).send('Invalid token'); }

Então, como os refresh tokens se encaixam nisso? Bem, quando o access token expira, o usuário precisaria fazer login novamente para obter um novo. Para evitar isso, podemos emitir um refresh token junto com o access token. O refresh token tem uma validade muito mais longa e pode ser usado para obter um novo access token sem a necessidade de o usuário fazer login novamente.

Para emitir um refresh token, podemos usar o mesmo método sign(), mas com um tempo de expiração mais longo.

const refreshToken = jwt.sign(payload, 'your-refresh-token-secret', { expiresIn: '7d' });

Quando o access token expira, o cliente pode enviar uma solicitação com o refresh token para obter um novo access token. Podemos então verificar o refresh token da mesma maneira que fizemos com o access token. Se o refresh token for válido, emitimos um novo access token.

const refreshToken = req.body.token; try { const decoded = jwt.verify(refreshToken, 'your-refresh-token-secret'); const newAccessToken = jwt.sign({ userId: decoded.userId }, 'your-secret-key', { expiresIn: '1h' }); res.json({ accessToken: newAccessToken }); } catch(err) { res.status(401).send('Invalid refresh token'); }

É importante notar que os refresh tokens também podem expirar. Quando isso acontece, o usuário precisará fazer login novamente. Além disso, você deve tratar os refresh tokens como senhas e armazená-los de forma segura.

Em resumo, os refresh tokens são uma parte essencial do gerenciamento de autenticação e autorização em aplicativos Node.js. Eles permitem que os usuários permaneçam autenticados por períodos mais longos sem a necessidade de inserir suas credenciais repetidamente. Ao mesmo tempo, eles ajudam a manter a segurança do aplicativo, garantindo que apenas solicitações de fontes confiáveis sejam aceitas.

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

O que é um refresh token e qual é a sua função em um sistema de autenticação JWT em um aplicativo Node.js?

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 implementar autenticação baseada em JWT em uma API NodeJS 119

Próxima página do Ebook Gratuito:

Trabalhando com JSON Web Tokens (JWT) em NodeJS: Como implementar autenticação baseada em JWT em uma API NodeJS

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