# 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 ```mermaid 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) ```bash # 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**: ```bash npm install ``` 2. **Configurar ambiente**: ```bash cp .env.example .env ``` 3. **Iniciar**: ```bash 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.