Skip to content

GustavoSachetto/Autenticacao-Autorizacao

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Autenticação e Autorização

image

Um serviço de autenticação moderno e robusto com login em duas etapas (código de autorização por e-mail + challenge token), emissão de access token (JWT) e refresh token, autocadastro, reset de senha e logout seguro.

Visão Geral

  • Autenticação de Dois Fatores - 2FA.
  • Renovação de sessão para obter novos tokens e atualizar o cookie com TTL consistente.
  • Autocadastro por e-mail com token de conclusão e política de senha segura.
  • Reset de senha com token enviado por e-mail, revogando sessões anteriores.
  • Proteção de endpoints de aplicação com JWT e limite de dispositivos ativos por usuário.

Tecnologias

  • Java 21, Spring Boot 3.5
  • Spring Security, Web, Validation, Data JPA
  • JWT via jjwt
  • OpenAPI/Swagger (springdoc)
  • PostgreSQL (produção) e H2 (testes)
  • Lombok

Endpoints Principais

Contexto base: /api

  • POST /auth/login — inicia login, retorna challengeToken e envia authorizationCode por e-mail.
  • POST /auth/login/complete — conclui login com challengeToken + authorizationCode, retorna accessToken e seta cookie refreshToken (HttpOnly, Secure, SameSite=Strict).
  • POST /auth/login/refresh — renova tokens usando Authorization: Bearer <jwt> + cookie refreshToken.
  • POST /auth/logout — revoga o access token e o refresh token do cookie.
  • POST /auth/register — autocadastro com e-mail e nome.
  • POST /auth/register/complete — conclusão de cadastro com token + nova senha.
  • POST /auth/password/reset — solicita e-mail com token para reset.
  • POST /auth/password/reset/complete — redefine a senha com token.

Fluxo de Autenticação (rápido)

  1. Iniciar login
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"acesso":"user@exemplo.com","senha":"MinhaSenhaForte123!"}'
# Resposta: { "challengeToken": "..." } e um código de autorização é enviado por e-mail
  1. Concluir login (use o challengeToken e o código recebido por e-mail)
curl -X POST http://localhost:8080/api/auth/login/complete \
  -H "Content-Type: application/json" \
  -d '{"challengeToken":"...","authorizationCode":"123456"}'
# Resposta: { "accessToken": "jwt..." } e cookie HttpOnly `refreshToken` é definido
  1. Renovar tokens
curl -X POST http://localhost:8080/api/auth/login/refresh \
  -H "Authorization: Bearer <access_jwt_expirado_ou_valido>" \
  --cookie "refreshToken=<valor_do_cookie>"
# Resposta: novo access token e novo cookie refresh
  1. Logout
curl -X POST http://localhost:8080/api/auth/logout \
  -H "Authorization: Bearer <access_jwt>" \
  --cookie "refreshToken=<valor_do_cookie>"
# Resposta: 204 e cookie de refresh é apagado

Estrutura

  • Controlador: src/main/java/com/sachetto/autenticacao/controller/*
  • Serviços: src/main/java/com/sachetto/autenticacao/service/auth/*
  • Repositórios: src/main/java/com/sachetto/autenticacao/repository/auth/*
  • DTOs/Validações: src/main/java/com/sachetto/autenticacao/dto/*, src/main/java/com/sachetto/autenticacao/validation/*

About

Sistema de login para projetos monolitos que contém autenticação de dois fatores, juntamente de um controle de permissão e perfil, e um sistema de refresh token.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages