- 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.
89 lines
2.8 KiB
Markdown
89 lines
2.8 KiB
Markdown
# 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.
|