- 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.
2.8 KiB
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
pgdriver 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.
- Base
💻 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
- Instalar dependências:
npm install - Configurar ambiente:
cp .env.example .env - Iniciar:
npm run dev
🔐 Modelo de Segurança
- JWTs Internos: Tokens curtos (ex: 15 min) contendo
sub,tenantIderoles. - Refresh Tokens: Tokens longos (ex: 7 dias) opacos e rotativos, armazenados no banco.
- 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:
- Builder: Compila TypeScript.
- Prod Deps: Instala apenas
dependenciesdo package.json. - Runtime: Copia o build e as dependências para uma imagem Distroless minimalista.