🔐 Plano de Execução: Autenticação Centralizada para Todos os Apps C-Suite
📋 Objetivo
Integrar todos os apps do C-Suite com o csuite-auth-external usando o mesmo padrão do csuite-checklist.
🎯 Apps a Atualizar
Apps FastAPI (precisam de adaptação):
- ✅ csuite-checklist (Flask) - Já implementado
- ⏳ csuite-gateway (FastAPI)
- ⏳ csuite-cashflow (FastAPI)
- ⏳ csuite-operations (FastAPI)
- ⏳ csuite-feature-store (FastAPI)
- ⏳ csuite-model-registry (FastAPI)
- ⏳ csuite-customer-decisions (FastAPI)
📦 Componentes Necessários
1. Módulo auth_client.py Reutilizável
- Versão Flask (já existe em
csuite-checklist) - Versão FastAPI (a criar)
- Suporte a sessões (Flask) e cookies/headers (FastAPI)
2. Rotas de Autenticação
/login- Redireciona parahttps://auth.internut.com.br/login/auth/callback- Recebe tokens após login/logout- Limpa sessão e redireciona
3. Decorator/Middleware de Autenticação
- Flask:
@login_required - FastAPI: Dependency injection ou middleware
🔧 Implementação por App
Padrão para Apps FastAPI:
# auth_client.py (FastAPI)
from fastapi import Depends, HTTPException, Request
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from starlette.responses import RedirectResponse
import requests
import os
AUTH_SERVICE_URL = "https://auth.internut.com.br/auth"
AUTH_WEB_URL = "https://auth.internut.com.br"
class AuthClient:
# Mesma implementação do Flask, mas adaptada para FastAPI
def get_current_user(request: Request):
"""Dependency para obter usuário atual"""
# Verifica token em cookie ou header
# Valida token
# Retorna dados do usuário
def login_required(request: Request):
"""Dependency que requer autenticação"""
user = get_current_user(request)
if not user:
# Redireciona para login
return user
Padrão para Rotas:
@app.get("/login")
async def login(request: Request):
"""Redireciona para login centralizado"""
# Constrói callback URL
# Redireciona para AUTH_WEB_URL/login?redirect_uri=...
@app.get("/auth/callback")
async def auth_callback(request: Request, access_token: str, refresh_token: str):
"""Recebe tokens após login"""
# Valida tokens
# Salva em cookies
# Redireciona para página inicial
@app.get("/logout")
async def logout():
"""Faz logout"""
# Limpa cookies
# Redireciona para login
✅ Checklist de Implementação por App
Para cada app FastAPI:
- [x] Criar módulo
auth_client_fastapi.pyreutilizável emcommon/ - [x] Criar script de teste automatizado
- [ ] csuite-gateway: Adicionar rotas
/login,/auth/callback,/logout - [ ] csuite-gateway: Aplicar dependency nas rotas protegidas
- [ ] csuite-cashflow: Adicionar rotas de autenticação
- [ ] csuite-operations: Adicionar rotas de autenticação
- [ ] csuite-feature-store: Adicionar rotas de autenticação
- [ ] csuite-model-registry: Adicionar rotas de autenticação
- [ ] csuite-customer-decisions: Adicionar rotas de autenticação
- [ ] Adicionar
requestsaorequirements.txtde cada app - [ ] Atualizar
docker-stack.ymlse necessário (adicionar X-Forwarded-Prefix) - [ ] Testar fluxo completo de autenticação em cada app
🧪 Plano de Testes
Testes por App:
- Teste de Login
- Acessar rota protegida → deve redirecionar para login
- Fazer login → deve redirecionar de volta com tokens
-
Verificar que cookies foram definidos
-
Teste de Autenticação
- Acessar rota protegida com token válido → deve permitir acesso
- Acessar rota protegida sem token → deve redirecionar para login
-
Acessar rota protegida com token expirado → deve renovar ou redirecionar
-
Teste de Logout
- Fazer logout → deve limpar cookies e redirecionar
Script de Teste Automatizado:
- Criar script que testa todos os apps
- Verificar endpoints de autenticação
- Validar fluxo completo
📝 Ordem de Execução
- ✅ Criar módulo
auth_client.pyreutilizável para FastAPI - ⏳ Atualizar
csuite-gateway(prioridade alta - portal principal) - ⏳ Atualizar
csuite-cashflow - ⏳ Atualizar
csuite-operations - ⏳ Atualizar
csuite-feature-store - ⏳ Atualizar
csuite-model-registry - ⏳ Atualizar
csuite-customer-decisions - ⏳ Criar script de teste automatizado
- ⏳ Executar testes em todos os apps
🚀 Próximos Passos
- Criar template
auth_client_fastapi.pybaseado no Flask - Começar pela integração do
csuite-gateway - Testar e validar
- Replicar para os demais apps