Skip to content

This project implements a secure login system using NestJS. The system offers registration features, authentication via email/password, generation of JWT tokens, role-based access control and password encryption.

License

Notifications You must be signed in to change notification settings

F4GN3R/auth-api

Repository files navigation

🔒 Auth API

  1. Descrição
  2. Funcionalidades
  3. Requisitos
  4. Tecnologias Utilizadas
  5. Instalação e Configuração
  6. Arquitetura do Projeto
  7. Segurança
  8. Testes
  9. Documentação da API
  10. Ambiente de produção
  11. Contribuição
  12. Licença
  13. Pontos de Expansão Futuros
  14. Cronograma Estimado
  15. Autor

Descrição

Este projeto implementa regras de autenticação e autorização utilizando NestJS. O sistema oferece funcionalidades de cadastro, autenticação via e-mail/senha, geração de tokens JWT, controle de acesso baseado em papéis (roles), criptografia de senhas e recuperação de acesso por hash.

Funcionalidades

  • Gerenciamento de Usuário: Permite o cadastro, edição, atualização e exclusão de usuários (CRUD).
  • Login: Autenticação via e-mail e senha.
  • Geração de Token JWT: Token JWT gerado no login para autenticação em rotas protegidas.
  • Recuperação de Senha: Envio de e-mail para redefinição de senha.
  • Controle de Acesso (Roles): Permissões diferenciadas por papéis (Admin, User).

Requisitos

Requisitos Funcionais

  • Cadastro, login e gerenciamento de usuários.
  • Autenticação e autorização via JWT.
  • Validação de tokens JWT em rotas protegidas.
  • Controle de acesso baseado em papéis (Roles).
  • Recuperação e redefinição de senha.

Requisitos Não Funcionais

  • Segurança: Uso de bcrypt para senhas e JWT para autenticação.
  • Escalabilidade: Capacidade de suportar múltiplos usuários simultâneos.
  • Manutenibilidade: Código modular, seguindo boas práticas (SOLID, Clean Code).

Tecnologias Utilizadas

  • NestJS: Framework principal.
  • TypeScript: Linguagem de programação.
  • JWT: Para autenticação e autorização.
  • Bcrypt: Para hashing de senhas.
  • Prisma: ORM para interação com banco de dados.
  • PostgreSQL: Banco de dados relacional.
  • MailerSend: Para envio de e-mails.
  • Swagger: Para documentação automática das APIs.
  • Docker: Para containerização do ambiente.
  • Render: Para ambiente de produção.

Instalação e Configuração

Pré-requisitos

  • Node.js
  • Pnpm
  • DockerCompose
  • NestJS CLI

Passos para Instalação

  1. Clone o repositório:
git clone https://github.com/F4GN3R/auth-api
  1. Instale as dependências:
$ cd auth-api && pnpm install
  1. Executar instância do banco de dados:
$ docker-compose up
  1. Configure as variáveis de ambiente no arquivo .env:
# DOCKER POSTGRESQL DATABASE
DATABASE_URL="postgresql://postgres:321654@localhost:6500/auth-api?schema=public"

# JWT
JWT_SECRET=""

# MAILERSEND
MAILERSEND_API_KEY=""
MAILERSEND_DOMAIN=""
MAILERSEND_TEMPLATE_ID=""

# WEBPAGE TO RESET PASSWORD
RESET_PASSWORD_URL=""

Para gerar o JWT_SECRET você pode utilizar o comando: openssl rand -base64 32

  1. Execute as migrações do banco de dados:
$ pnpm exec prisma migrate dev
  1. Inicie o servidor:
# development
$ pnpm run start

# watch mode
$ pnpm run start:dev

# production mode
$ pnpm run start:prod

Arquitetura do Projeto

Banco de dados

ERD Database

Estrutura Modular

O projeto é organizado em módulos para facilitar a manutenção e escalabilidade:

  • AuthModule: Gerencia a autenticação e geração de tokens JWT.
  • UserModule: Responsável pelo CRUD de usuários.
  • MailerSendModule: Responsável pelo envio de usuários.

Repository Pattern

Permite um encapsulamento da lógica de acesso aos dados, impulsionando o uso da injeção de dependencia (DI) e proporcionando uma visão mais orientada a objetos.

  • UserRepository: Define os métodos disponíveis do repositório de usuários.
  • PrismaUserRepository: Implementa os métodos do repositório de usuários com Prisma ORM.

Rotas Principais

  • GET /alive: Verificação de serviço disponível.
  • POST /user: Cadastro de usuário.
  • GET /user: Retorna os dados do usuário autenticado.
  • PATCH /user: Atualiza os dados do usuário autenticado.
  • DELETE /user: Remove o cadastro do usuário autenticado.
  • GET /user/list-all: Retorna todos os usuários cadastrados.
  • POST /auth/sign-in: Autenticação e geração de token JWT.
  • PATCH /auth/account-recovery: Envia e-mail para recuperação de acesso.
  • PATCH /auth/reset-password: Alteração de senha via hash.
  • PATCH /auth/update-password: Atualização de senha.

Segurança

  • Hashing de Senhas: As senhas são armazenadas utilizando bcrypt.
  • Autenticação JWT: As rotas protegidas utilizam tokens JWT para autenticação.
  • Guards e Middleware:
    • AuthGuard: Protege rotas que exigem autenticação.
    • RolesGuard: Assegura que usuários com permissões adequadas possam acessar rotas específicas.
  • Boas Práticas de Segurança:
    • Proteção contra ataques de força bruta (rate-limiting).
    • Validação de entrada de dados para evitar injeções de SQL.
    • Proteção contra XSS e CSRF.

Testes

  • Testes Unitários: Para verificar a lógica de autenticação e criptografia.
  • Testes de Integração: Para garantir a interação correta entre os módulos (ex: login e geração de token).
  • Testes de Segurança: Validar a resiliência do sistema contra ataques.

Executar testes

# unit tests
$ pnpm run test

# e2e tests
$ pnpm run test:e2e

# test coverage
$ pnpm run test:cov

Documentação da API

A documentação da API está disponível através do Swagger. Para acessá-la, inicie o projeto e navegue para:

http://localhost:3333/documentation

Ambiente de produção

Para produção, escolhemos a plataforma Render para publicar a API e o banco de dados.

https://auth-api-55xs.onrender.com/v1

Contribuição

  1. Faça um fork do projeto.
  2. Crie uma nova branch para a feature (git checkout -b feature/nova-feature).
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature').
  4. Faça o push para a branch (git push origin feature/nova-feature).
  5. Abra um Pull Request.

Licença

Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.

Pontos de Expansão Futuros

  • Refresh Token: Implementar um fluxo de refresh token para renovar o JWT.
  • OAuth: Integração com provedores de login social (Google, Facebook).
  • Autenticação Multi-Fator (MFA): Adicionar uma camada extra de segurança.
  • Logs de Acesso e Auditoria: Registrar tentativas de login e outras ações críticas.

Cronograma Estimado

Fase Tempo Estimado
Levantamento de Requisitos 2 dias
Configuração do Projeto 1 dia
Desenvolvimento Backend 2 dias
Implementação de Segurança 2 dias
Testes e Correções 2 dias
Documentação 1 dia
Deploy em produção 1 dia
Total estimado 11 dias

Autor

F4GN3R Fagner Morais
Full Stack Developer and Senior System Analist

GitHub LinkedIn

Esse README.md serve como uma documentação completa do projeto e pode ser utilizado diretamente no GitHub.

About

This project implements a secure login system using NestJS. The system offers registration features, authentication via email/password, generation of JWT tokens, role-based access control and password encryption.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published