core/identity-gateway/IDENTITY-GATEWAY.md
Tiago Yamamoto a52bd4519d refactor: optimize Dockerfiles and documentation for core services
- Use Google Distroless images for all services (Go & Node.js).
- Standardize documentation with [PROJECT-NAME].md.
- Add .dockerignore and .gitignore to all projects.
- Remove docker-compose.yml in favor of docker run instructions.
- Fix Go version and dependency issues in observability, repo-integrations, and security-governance.
- Add Podman support (fully qualified image names).
- Update Dashboard to use Node.js static server for Distroless compatibility.
2025-12-30 13:22:34 -03:00

2.8 KiB

IDENTITY-GATEWAY

O identity-gateway é a autoridade central de autenticação e autorização interna da plataforma. Ele emite tokens confiáveis para comunicação entre microserviços e gerencia o acesso baseados em roles (RBAC).

📋 Visão Geral

Este serviço não compete com provedores de identidade públicos (como Auth0 ou Clerk). Ele serve como um "porteiro" para o cluster de serviços internos, garantindo que todas as requisições entre serviços ou vindas de frontends autorizados carreguem um contexto de segurança válido.

Arquitetura de Confiança

graph TD
    User[Usuário/Client] -->|Login| Gateway[Identity Gateway]
    Gateway -->|Valida Credenciais| DB[(Users DB)]
    Gateway -->|Emite JWT| Token[Internal JWT]
    
    Token -->|Bearer Auth| BaaS[BaaS Control Plane]
    Token -->|Bearer Auth| Billing[Billing Core]
    Token -->|Bearer Auth| CRM[CRM Core]
    
    subgraph Trust Boundary
        BaaS
        Billing
        CRM
    end

🚀 Estrutura do Projeto

O projeto é construído com Fastify e segue uma arquitetura modular:

Diretório Responsabilidade
src/core Guards, plugins globais e interceptors.
src/modules/auth Login, refresh token e recuperação de senha.
src/modules/users Gestão de usuários e perfis.
src/modules/rbac Roles, Permissions e Policies.

🛠️ Tecnologias e Otimizações

  • Backend: Node.js 20 + Fastify.
  • Database: PostgreSQL (via pg driver ou TypeORM/Prisma).
  • Auth: JWT (Json Web Tokens) assinados com chaves assimétricas ou segredos fortes.
  • Containerização:
    • Base gcr.io/distroless/nodejs20-debian12.
    • Execução segura sem acesso a shell.
    • Usuário não-privilegiado.

💻 Como Executar

Docker (Recomendado)

# Build
docker build -t identity-gateway .

# Run
docker run -p 4000:4000 --env-file .env identity-gateway

Serviço rodando na porta 4000.

Desenvolvimento Local

  1. Instalar dependências:
    npm install
    
  2. Configurar ambiente:
    cp .env.example .env
    
  3. Iniciar:
    npm run dev
    

🔐 Modelo de Segurança

  1. JWTs Internos: Tokens curtos (ex: 15 min) contendo sub, tenantId e roles.
  2. Refresh Tokens: Tokens longos (ex: 7 dias) opacos e rotativos, armazenados no banco.
  3. Service-to-Service: Serviços podem usar Client Credentials para obter tokens de máquina.

🔧 Detalhes do Dockerfile

O Dockerfile utiliza 3 estágios para garantir o menor tamanho possível:

  1. Builder: Compila TypeScript.
  2. Prod Deps: Instala apenas dependencies do package.json.
  3. Runtime: Copia o build e as dependências para uma imagem Distroless minimalista.