
#5 Desafio de Programação: Autenticador como Provedor de Identidade (IDP)
Descrição
Este desafio propõe o desenvolvimento de um autenticador simples que atua como um Provedor de Identidade (IDP). O sistema deve permitir que usuários se registrem, façam login e autentiquem-se em serviços externos, redirecionando-os após a autenticação. É ideal para aprender os fundamentos de autenticação, segurança, e protocolos como OAuth 2.0, além de explorar integrações futuras.
Objetivo
Criar um sistema de autenticação que:
- Permita registro, login e recuperação de senha.
- Gere tokens JWT para autenticação e acesso a áreas protegidas.
- Redirecione usuários autenticados para a aplicação cliente que requisitou o login.
- Implemente um fluxo básico de OAuth 2.0 para serviços externos.
Especificações de Arquitetura
Frontend
- Tecnologias: HTML, CSS e JavaScript (ou frameworks modernos como React, opcional).
- Páginas principais:
- Registro
- Login
- Perfil do Usuário (opcional)
Backend
- Endpoints:
/api/auth/register
: Registro de usuários./api/auth/login
: Login e geração de JWT./api/auth/verify-email
: Verificação de email./api/auth/reset-password
: Solicitação de recuperação de senha./api/auth/new-password
: Redefinição de senha./api/auth/oauth
: Início do fluxo OAuth 2.0./api/auth/callback
: Callback para redirecionar usuários autenticados.
Banco de Dados
- Tecnologia: MySQL ou PostgreSQL.
- Tabelas:
- Users:
id
(UUID, Primary Key)name
(String)email
(String, único)password
(Hash)is_verified
(Boolean)
- Tokens (opcional):
user_id
(Foreign Key)token
(JWT)expires_at
(Timestamp)
- Users:
Segurança
- Hash de senhas com
bcrypt
. - Tokens JWT com expiração curta e suporte a refresh tokens.
- Proteção contra ataques de força bruta com limites de requisições.
Endpoints
Autenticação
-
Registrar Usuário
- POST
/api/auth/register
- Body:
{ "name": "João Silva", "email": "joao@example.com", "password": "senhaSegura123" }
- Response:
{ "message": "Usuário registrado. Verifique seu email para ativar a conta." }
- POST
-
Login
- POST
/api/auth/login
- Body:
{ "email": "joao@example.com", "password": "senhaSegura123" }
- Response:
{ "token": "jwt-token", "redirect_url": "https://appcliente.com/dashboard" }
- POST
-
Verificar Email
- GET
/api/auth/verify-email
- Query Params:
token=<verification_token>
- Response:
{ "message": "Email verificado com sucesso." }
- GET
-
Recuperar Senha
- POST
/api/auth/reset-password
- Body:
{ "email": "joao@example.com" }
- Response:
{ "message": "Email de recuperação enviado." }
- POST
-
Redefinir Senha
- POST
/api/auth/new-password
- Body:
{ "token": "reset-token", "new_password": "novaSenha123" }
- Response:
{ "message": "Senha redefinida com sucesso." }
- POST
OAuth 2.0
-
Início do Fluxo OAuth
- GET
/api/auth/oauth
- Query Params:
client_id
redirect_uri
- Response: Redireciona o usuário para a página de login.
- GET
-
Callback
- GET
/api/auth/callback
- Query Params:
code
state
- Response:
{ "access_token": "jwt-token", "redirect_url": "https://appcliente.com/dashboard" }
- GET
Fluxo de Uso
-
Registro de Usuário:
- Usuário preenche um formulário.
- Recebe um email com um link de ativação.
- Após ativar, pode realizar login.
-
Login:
- Usuário envia email e senha.
- Backend retorna JWT e URL de redirecionamento.
-
OAuth para Aplicações Externas:
- Aplicação cliente redireciona o usuário para o IDP.
- Após autenticação, o usuário é redirecionado de volta para a aplicação com um token.
-
Recuperação de Senha:
- Usuário solicita redefinição informando o email.
- Recebe link para criar uma nova senha.
O que Será Aprendido
-
Fundamentos de Autenticação e Segurança:
- Hash de senhas com
bcrypt
. - Uso de JWTs para autenticação.
- Hash de senhas com
-
Protocolos:
- Implementação básica do OAuth 2.0.
-
Backend Avançado:
- Criação de APIs RESTful seguras.
- Gerenciamento de tokens e sessões.
-
Integrações:
- Envio de emails com provedores externos (SendGrid ou Mailgun).
Publicação
-
Configuração de Ambiente:
- Banco de dados relacional na nuvem (ex.: AWS RDS, Heroku Postgres).
- Backend em uma plataforma como Heroku, Vercel ou AWS Lambda.
-
Frontend:
- Hospedar as páginas estáticas em serviços como Netlify ou Vercel.
-
Domínio Customizado (Opcional):
- Configurar um domínio próprio para o IDP.
Possibilidades de Expansão
-
Autenticação Multifator (MFA):
- Adicionar autenticação via SMS ou aplicativos como Google Authenticator.
-
Administração:
- Painel para gerenciar usuários e tokens.
-
Suporte Avançado ao OAuth 2.0:
- Permitir que outros sistemas utilizem o IDP para autenticação.
Bom desafio! 🚀
Envie o link do seu projeto
Envie o link do seu projeto para o email contato@racoelho.com.br.