Uma das partes mais importantes de qualquer aplicação é a segurança e a maneira como lidamos com a autenticação e autorização. Isso é especialmente verdadeiro ao criar APIs, onde precisamos garantir que apenas usuários autenticados e autorizados possam acessar certos dados e funcionalidades. Neste capítulo, vamos explorar como criar uma API REST básica com NodeJS e ExpressJS, com foco na autenticação e autorização.

Autenticação

Autenticação é o processo de verificar a identidade de um usuário. Em outras palavras, é como confirmamos que um usuário é quem ele diz ser. Existem várias maneiras de fazer isso, mas uma das mais comuns é através do uso de nomes de usuário e senhas.

Para implementar a autenticação em nossa API, primeiro precisamos instalar algumas dependências. Vamos usar o pacote 'bcrypt' para hashear as senhas dos usuários e o pacote 'jsonwebtoken' para gerar tokens de autenticação.

$ npm install bcrypt jsonwebtoken

Com as dependências instaladas, podemos começar a implementar a autenticação. Primeiro, vamos criar uma rota para o registro de usuários. Nesta rota, vamos hashear a senha do usuário antes de armazená-la no banco de dados.

const express = require('express');
const bcrypt = require('bcrypt');
const User = require('../models/User');

const router = express.Router();

router.post('/register', async (req, res) => {
  const hashedPassword = await bcrypt.hash(req.body.password, 10);
  const user = new User({ username: req.body.username, password: hashedPassword });
  await user.save();
  res.status(201).send({ message: 'User registered successfully' });
});

Agora, vamos criar uma rota para o login dos usuários. Nesta rota, vamos verificar se a senha fornecida corresponde à senha armazenada no banco de dados. Se a senha estiver correta, vamos gerar um token de autenticação e enviá-lo ao usuário.

const jwt = require('jsonwebtoken');

router.post('/login', async (req, res) => {
  const user = await User.findOne({ username: req.body.username });
  if (!user || !await bcrypt.compare(req.body.password, user.password)) {
    return res.status(401).send({ message: 'Invalid username or password' });
  }

  const token = jwt.sign({ id: user._id }, 'your_jwt_secret');
  res.send({ token });
});

Autorização

Autorização é o processo de verificar se um usuário tem permissão para realizar uma ação específica. Em outras palavras, é como determinamos o que um usuário pode e não pode fazer. Existem várias maneiras de fazer isso, mas uma das mais comuns é através do uso de tokens de autenticação.

Vamos criar um middleware para verificar o token de autenticação dos usuários. Se o token for válido, vamos armazenar o ID do usuário no objeto de solicitação e chamar a próxima função. Se o token não for válido, vamos retornar uma resposta com o status 401 (Não Autorizado).

const jwt = require('jsonwebtoken');

const authenticate = (req, res, next) => {
  const token = req.headers.authorization;
  if (!token) {
    return res.status(401).send({ message: 'No token provided' });
  }

  jwt.verify(token, 'your_jwt_secret', (err, decoded) => {
    if (err) {
      return res.status(401).send({ message: 'Invalid token' });
    }

    req.userId = decoded.id;
    next();
  });
};

Agora, podemos usar este middleware em qualquer rota que requer autenticação. Por exemplo, podemos criar uma rota para obter os detalhes do usuário autenticado.

router.get('/me', authenticate, async (req, res) => {
  const user = await User.findById(req.userId);
  res.send(user);
});

Com isso, concluímos a criação de uma API REST básica com NodeJS e ExpressJS, com autenticação e autorização. Lembre-se, a segurança é um aspecto crucial de qualquer aplicação e deve ser levada a sério desde o início do desenvolvimento.

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

Qual é a diferença entre autenticação e autorização no contexto de uma API REST e como elas são implementadas usando NodeJS e ExpressJS?

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

Você errou! Tente novamente.

Imagem do artigo Criando uma API REST básica com NodeJS e ExpressJS: Manipulação de dados no banco de dados

Próxima página do Ebook Gratuito:

75Criando uma API REST básica com NodeJS e ExpressJS: Manipulação de dados no banco de dados

3 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

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

Cursos gratuitos em
vídeo, áudio e texto