Autenticação e autorização em API's NodeJS: Armazenamento seguro de senhas

Capítulo 103

Tempo estimado de leitura: 3 minutos

+ Exercício
Audio Icon

Ouça em áudio

0:00 / 0:00

A autenticação e a autorização são partes fundamentais da segurança em qualquer aplicação web, incluindo APIs desenvolvidas em NodeJS. A autenticação é o processo de verificar a identidade de um usuário, enquanto a autorização é o processo de verificar o que o usuário autenticado tem permissão para fazer. Este capítulo irá se concentrar em como implementar esses dois aspectos críticos na sua API NodeJS, com ênfase especial no armazenamento seguro de senhas.

Para começar, é importante entender que o armazenamento de senhas em texto puro em seu banco de dados é uma prática extremamente insegura. Se um invasor conseguir acessar seu banco de dados, ele terá acesso a todas as senhas de seus usuários. Para evitar isso, é necessário criptografar as senhas antes de armazená-las. A maneira mais comum de fazer isso é através do uso de um processo chamado 'hashing'.

O 'hashing' é um processo que transforma um conjunto de dados em uma string de comprimento fixo, que é supostamente única para cada conjunto de dados de entrada. Quando um usuário cria uma conta ou altera sua senha, você deve criar um hash da senha e armazenar esse hash no banco de dados. Quando o usuário tenta fazer login, você cria um hash da senha fornecida e a compara com o hash armazenado. Se eles corresponderem, a senha está correta.

Em NodeJS, existem várias bibliotecas que você pode usar para criar hashes de senhas, como bcrypt, scrypt e Argon2. Bcrypt é uma das mais populares, devido à sua facilidade de uso e segurança comprovada. Para usar bcrypt, você primeiro precisa instalá-lo em seu projeto com o comando 'npm install bcrypt'. Depois disso, você pode usar a função 'bcrypt.hash' para criar um hash de uma senha.

Além de 'hashing', outra prática comum é adicionar um 'salt' à senha antes de criar o hash. Um 'salt' é uma string aleatória que é adicionada à senha para prevenir ataques de 'rainbow table'. Uma 'rainbow table' é uma tabela pré-computada de hashes para um grande número de possíveis senhas, que um invasor pode usar para descobrir rapidamente a senha original a partir do hash. Ao adicionar um 'salt' único a cada senha, você torna ineficaz o uso de 'rainbow tables'.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

Bcrypt torna fácil adicionar um 'salt' às suas senhas. Quando você chama a função 'bcrypt.hash', você pode passar um segundo argumento que é o número de rodadas que bcrypt deve usar para gerar o 'salt'. Este número é um trade-off entre segurança e desempenho: um número maior tornará o 'salt' mais seguro, mas também levará mais tempo para gerar.

Agora que você sabe como armazenar senhas de forma segura, vamos falar sobre autenticação e autorização. Autenticação em APIs NodeJS geralmente é feita através de tokens JWT (JSON Web Token). Quando um usuário faz login, a API gera um token JWT que inclui a identidade do usuário e, possivelmente, outras informações. Este token é então enviado de volta ao cliente, que deve incluí-lo em todas as solicitações subsequentes à API.

A autorização é o processo de verificar se o usuário autenticado tem permissão para realizar a ação solicitada. Isso geralmente é feito através de um sistema de 'roles' ou 'permissions'. Por exemplo, você pode ter 'roles' de usuário e administrador, onde o administrador tem permissão para fazer coisas que o usuário não tem.

Em resumo, a autenticação e a autorização são aspectos essenciais da segurança em APIs NodeJS. É importante armazenar as senhas de forma segura através do uso de 'hashing' e 'salting', e usar tokens JWT para autenticação. A autorização deve ser implementada através de um sistema de 'roles' ou 'permissions'.

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

Qual é a diferença entre autenticação e autorização em uma API NodeJS e como elas são implementadas?

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

Você errou! Tente novamente.

A autenticação verifica a identidade de um usuário, usando técnicas como 'hashing' e 'salting' para proteger credenciais. A autorização determina o que um usuário autenticado pode fazer, utilizando sistemas de 'roles' ou 'permissions'.

Próximo capitúlo

Autenticação e autorização em API's NodeJS: Geração e renovação de tokens de acesso

Arrow Right Icon
Capa do Ebook gratuito Como criar APIs em NodeJS do básico ao avançado
69%

Como criar APIs em NodeJS do básico ao avançado

Novo curso

149 páginas

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