10.9. Criando uma API REST básica com NodeJS e ExpressJS: Autenticação e autorização

Página 74

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.

Now answer the exercise about the content:

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?

You are right! Congratulations, now go to the next page

You missed! Try again.

Next page of the Free Ebook:

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

Earn your Certificate for this Course for Free! by downloading the Cursa app and reading the ebook there. Available on Google Play or App Store!

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text