Projeto de arquitetura multi-tenant com autenticação JWT usando Keycloak.
- Taskflow Service: http://localhost:8081
- Documentação Swagger: http://localhost:8081/swagger/index.html
- Keycloak: http://localhost:8080
- Keycloak Admin: http://localhost:8080/admin (admin/admin)
- Jaeger: http://localhost:16686
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3001 (acesso anônimo somente leitura)
- LocalStack Web: http://localhost:3000
O dashboard TaskFlow — Operações de negócio é provisionado automaticamente no Grafana. Ele apresenta taxa, erros e duração dos spans task.status.change e task.history.persist, além de permitir navegar dos exemplars do Prometheus para os traces no Jaeger.
Também são provisionados os dashboards TaskFlow — Runtime da aplicação, com CPU, memória residente, heap, goroutines, threads e file descriptors do serviço, e TaskFlow — Pipeline OpenTelemetry, com volume recebido/exportado, falhas, filas e consumo do Collector.
Para gerar uma bateria de chamadas com sucessos, erros e concorrência:
make generate-traffic
# Carga maior: 20 ciclos por worker e 4 workers paralelos
./development-environment/observability/generate-taskflow-traffic.sh -n 20 -c 4O script cria, lista, altera, muda status, consulta histórico e remove tarefas. Também produz erros intencionais de autenticação, validação e recurso inexistente para alimentar taxa de erro e spans com STATUS_CODE_ERROR.
- PostgreSQL (Aplicação): localhost:5432
- PostgreSQL (Keycloak): localhost:5433
- Redis: localhost:6379
-
Iniciar todos os serviços:
docker-compose up -d
-
Aguardar inicialização completa:
# Verificar status dos serviços docker-compose ps # Acompanhar logs do Keycloak (pode levar alguns minutos) docker-compose logs -f keycloak
-
Obter tokens JWT para testes:
./development-environment/keycloak/get-tokens.sh
-
Testar a API com autenticação:
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" http://localhost/api/v1/tasks
| Username | Password | Tenant ID | Role | Uso |
|---|---|---|---|---|
| testuser1 | password123 | 550e8400-e29b-41d4-a716-446655440001 | user | Usuário do Tenant 1 |
| testuser2 | password123 | 550e8400-e29b-41d4-a716-446655440002 | user | Usuário do Tenant 2 |
| admin | admin123 | 550e8400-e29b-41d4-a716-446655440000 | admin | Usuário Administrador |
Este projeto utiliza Keycloak para autenticação e autorização com suporte a multi-tenancy através de JWT tokens.
- Isolamento por Tenant: Cada usuário pertence a um tenant específico
- Tokens JWT: Autenticação stateless com claims personalizadas
- Roles: Sistema de permissões baseado em roles
- Multi-tenancy: Separação de dados por tenant_id
{
"sid": "user-id",
"preferred_username": "testuser1",
"email": "testuser1@taskflow.com",
"tenant_id": "550e8400-e29b-41d4-a716-446655440001",
"realm_access": {
"roles": ["user"]
}
}Para mais detalhes sobre autenticação, consulte: Keycloak README
cd taskflow-service
make build-imagecd taskflow-service
make test# Todos os serviços
docker-compose logs -f
# Serviços específicos
docker-compose logs -f taskflow-service
docker-compose logs -f keycloak
docker-compose logs -f nginx# Parar todos os serviços
make stop
# Parar e remover volumes (cuidado: apaga dados!)
make stop clean