Demonstração prática de autenticação e autorização em microserviços usando OAuth 2.0, JWT tokens e controle de acesso baseado em roles (RBAC). ATENÇÃO: Essa aplicação é apenas um teste para fins didáticos. Algumas funcionalidades estão "mockadas" e/ou não foram implementadas.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend Service│ │ Auth Service │ │Product Service │
│ (Porta 3000) │ │ (Porta 3001) │ │ (Porta 3002) │
│ │ │ │ │ │
│ • Templates EJS │ │ • OAuth 2.0 │ │ • CRUD Produtos │
│ • Interface Web │◄──▶│ • JWT Tokens │◄──▶│ • Gestão Pedidos│
│ • Auth Cookies │ │ • Gestão Users │ │ • Shopping Cart │
│ • UI por Role │ │ • RBAC │ │ • Relatórios │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ Bancos SQLite │
│ │
│ • auth.db │
│ • products.db │
└─────────────────┘
- Authorization Code Flow: Para usuários web
- Client Credentials Flow: Para comunicação service-to-service
- Refresh Token Rotation: Renovação segura de tokens
- Access Tokens: Curta duração (15 min)
- Refresh Tokens: Longa duração (7 dias)
- Claims customizadas: user_id, role, scopes
- Admin: CRUD completo, relatórios, gestão de usuários
- Viewer: Visualização e relatórios de vendas
- Customer: Navegação, compras, carrinho
- Node.js 16+
- npm 8+
# Clone ou baixe o projeto
cd ecommerce-microservices
# Instale dependências de todos os serviços
npm run install:all
# Inicie todos os serviços
npm start- Frontend: http://localhost:3000
- Auth API: http://localhost:3001/health
- Product API: http://localhost:3002/health
| Role | Senha | Permissões | |
|---|---|---|---|
| Admin | admin@ecommerce.com | admin123 | CRUD produtos, visualizar pedidos, relatórios |
| Viewer | viewer@ecommerce.com | viewer123 | Visualizar relatórios de vendas |
| Customer | customer@ecommerce.com | customer123 | Navegar produtos, fazer compras |
- ✅ Login com JWT tokens
- ✅ Validação de tokens entre serviços
- ✅ Renovação automática de tokens
- ✅ Gerenciamento de sessões via cookies
- ✅ Controle de acesso baseado em roles
- ✅ Permissões baseadas em scopes
- ✅ Autorização a nível de recursos
- ✅ Autenticação service-to-service
- ✅ Isolamento de serviços
- ✅ Bancos de dados independentes
- ✅ Comunicação via REST API
- ✅ Autenticação distribuída
POST /auth/login - Login de usuário
POST /auth/validate - Validar token JWT
GET /auth/profile - Perfil do usuário
POST /oauth/token - Endpoint de token OAuth
GET /oauth/authorize - Endpoint de autorização OAuth
GET /products - Listar produtos (público)
POST /products - Criar produto (admin)
PUT /products/:id - Atualizar produto (admin)
DELETE /products/:id - Deletar produto (admin)
GET /orders - Listar pedidos (autenticado)
POST /orders/checkout - Finalizar compra (customer)
GET /orders/cart - Ver carrinho (customer)
POST /orders/cart/add - Adicionar ao carrinho (customer)
GET /reports/sales - Relatórios (viewer/admin)
GET / - Redireciona para login
GET /products - Catálogo de produtos
GET /login - Página de login
POST /login - Processar login
GET /dashboard - Dashboard personalizado por role
GET /cart - Carrinho de compras
POST /cart/add/:id - Adicionar produto ao carrinho
POST /checkout - Finalizar compra
GET /admin/products - Gestão de produtos (admin)
GET /architecture - Documentação da arquitetura
- Algoritmo: HS256 (HMAC SHA-256)
- Claims: iss, aud, exp, user_id, role, scopes
- Validação: Assinatura + expiração + claims
- Validação de tokens: Via auth service
- Verificação de scopes: Permissões granulares
- Verificação de roles: Controle por papel
- Propriedade de recursos: Acesso a recursos próprios
- Rate limiting: Proteção contra abuso de API
- CORS: Configurado para origins específicos
- Helmet: Headers de segurança HTTP
- Validação de entrada: Sanitização de dados
users - Usuários do sistemaproducts - Catálogo de produtos
orders - Pedidos dos clientes
order_items - Itens dos pedidos
cart_items - Carrinho de compras (implementado via orders)# Auth Service
JWT_SECRET=your-super-secret-jwt-key
PORT=3001
# Product Service
AUTH_SERVICE_URL=http://localhost:3001
PORT=3002
# Frontend Service
AUTH_SERVICE_URL=http://localhost:3001
PRODUCT_SERVICE_URL=http://localhost:3002
PORT=3000- Authorization Code: Login web tradicional
- Client Credentials: Comunicação service-to-service
- Token Refresh: Renovação automática de tokens
{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"user_id": 1,
"email": "admin@ecommerce.com",
"role": "admin",
"scopes": ["read", "write", "admin"],
"iss": "ecommerce-auth-service",
"aud": "ecommerce-api",
"exp": 1640995200
}
}| Recurso | Admin | Viewer | Customer |
|---|---|---|---|
| Produtos (Leitura) | ✅ | ✅ | ✅ |
| Produtos (Escrita) | ✅ | ❌ | ❌ |
| Pedidos (Próprios) | ✅ | ❌ | ✅ |
| Pedidos (Todos) | ✅ | ❌ | ❌ |
| Relatórios | ✅ | ✅ | ❌ |
| Carrinho | ❌ | ❌ | ✅ |
# Login
curl -X POST http://localhost:3001/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@ecommerce.com","password":"admin123"}'
# Validar token
curl -X POST http://localhost:3001/auth/validate \
-H "Content-Type: application/json" \
-d '{"token":"SEU_JWT_TOKEN"}'# Acessar produtos (público)
curl http://localhost:3002/products
# Criar produto (requer admin)
curl -X POST http://localhost:3002/products \
-H "Authorization: Bearer SEU_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Produto Teste","price":99.99,"category":"Teste"}'
# Ver relatórios (requer viewer/admin)
curl http://localhost:3002/reports/sales \
-H "Authorization: Bearer SEU_JWT_TOKEN"Utilize a collection disponível em /postman/ para testes automatizados:
- Collection:
E-commerce_Simple_Tests.postman_collection.json - Environment:
E-commerce_Environment.postman_environment.json - Guia:
QUICK_TEST_SCENARIOS.md
Esta aplicação demonstra na prática:
- Implementação OAuth 2.0: Fluxos completos de autorização
- Gerenciamento JWT: Criação, validação e renovação de tokens
- Segurança em Microserviços: Autenticação distribuída
- Autorização RBAC: Controle granular de acesso
- Comunicação entre Serviços: Autenticação service-to-service
- Gerenciamento de Sessões: Cookies e armazenamento de tokens
- Segurança de APIs: Rate limiting, CORS, validação
- RFC 6749 - OAuth 2.0 Authorization Framework
- RFC 7519 - JSON Web Token (JWT)
- OWASP API Security Top 10
- OAuth 2.0 Security Best Current Practice