Skip to content

devfullcycle/fc4-arq-multi-tenancy

Repository files navigation

fc4-arq-multi-tenancy

Projeto de arquitetura multi-tenant com autenticação JWT usando Keycloak.

Serviços Disponíveis

Aplicação Principal

Autenticação

Observabilidade

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 4

O 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.

Bancos de Dados

  • PostgreSQL (Aplicação): localhost:5432
  • PostgreSQL (Keycloak): localhost:5433
  • Redis: localhost:6379

Quick Start

  1. Iniciar todos os serviços:

    docker-compose up -d
  2. 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
  3. Obter tokens JWT para testes:

    ./development-environment/keycloak/get-tokens.sh
  4. Testar a API com autenticação:

    curl -H "Authorization: Bearer YOUR_TOKEN_HERE" http://localhost/api/v1/tasks

Usuários de Teste

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

Autenticação JWT

Este projeto utiliza Keycloak para autenticação e autorização com suporte a multi-tenancy através de JWT tokens.

Características:

  • 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

Token Claims:

{
  "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

Desenvolvimento

Build da Aplicação

cd taskflow-service
make build-image

Executar Testes

cd taskflow-service
make test

Logs dos Serviços

# 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 os Serviços

# Parar todos os serviços
make stop

# Parar e remover volumes (cuidado: apaga dados!)
make stop clean

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors