Login único para uma plataforma inteira.
identity provider · RBAC por app · infra como código- O que é
- Identity provider e portal de catálogo de uma plataforma interna de múltiplos apps
- Papel
- Sozinho: design, arquitetura, backend, frontend, infra e CI/CD
- Stack
- Python 3.12 · FastAPI · React 18 · PostgreSQL 16 · Terraform · ECS Fargate
- Formato
- Página de case, sem demo: é tela de login, e tela de login não conta história
O que foi feito, por que assim, o que resolveu
§ 01 a 03O que foi feito
Identity provider e portal de catálogo de aplicações de uma plataforma interna. Autentica por SSO OAuth e por credenciais locais, emite JWT RS256 que os serviços filhos validam via JWKS, serve o portal com as aplicações liberadas por usuário, com RBAC sincronizado da fonte de identidade, e gera tokens de embed single-use para SSO entre serviços.
Feito sozinho: design, arquitetura, backend, frontend, infraestrutura e esteira de deploy.
Por que foi feito assim
A decisão que define o resto é como os apps confiam no token. Ela veio antes de qualquer linha de código, porque muda o acoplamento entre todos os serviços.
- Descartado
- Sessão compartilhada entre os apps. Simples de começar, mas obriga cada app a chamar o core a cada request e exige um segredo compartilhado circulando entre serviços.
- Escolhido
- JWT RS256 com JWKS. Cada app filho valida o token com a chave pública, sem chamar o core e sem segredo compartilhado. A rotação de chave deixa de ser evento coordenado entre times.
Token de embed single-use com TTL de 60 s. O portal navega para o app filho com um código descartável, que é trocado por um JWT já com os papéis mapeados para aquele app. Evita re-login e evita passar token na URL, que é onde ele acabaria no log do servidor e no histórico do navegador.
Mapa de papéis centralizado. A tradução entre os papéis da fonte de identidade e os papéis de cada app vive em um lugar só. Sem isso, a regra de autorização se espalha e cada app passa a ter a sua versão da verdade.
Terraform account-agnostic. A infra sobe em qualquer conta AWS sem editar identificador fixo. É o que separa "funciona na minha conta" de infraestrutura de verdade.
O que resolveu
Login único para uma plataforma de múltiplos apps, com autorização por app. Parar na autenticação compartilhada é o erro comum nesse desenho.
Deploy por GitHub Actions em dois workflows separados: plan
automático em pull request e apply manual para a infra; build →
ECR → nova revisão de task definition → update do serviço para a aplicação.
A suíte cobre login, JWT, JWKS, RBAC, upload de avatar, claims de SSO e a
guarda de tamanho do JWT, rodando em SQLite in-memory, sem precisar de
Postgres. São 62 testes: 59 passam e 3 falham. As que
falham são test_me_with_valid_token,
test_logout_blacklists_token e
test_existing_user_name_updated. As três são anteriores à
sanitização do repositório, confirmado rodando a suíte no commit original.
Estão aqui porque cobertura de testes com suíte vermelha se explica, não se
arredonda.
As peças
ainda a produzirPendente nesta folha: as capturas do portal, do admin e do perfil, e o diagrama de arquitetura redesenhado para tela. Também as três falhas de suíte descritas acima, a consertar antes de o case afirmar cobertura verde.
- 228
- commits no histórico
- RS256
- assinatura do JWT
- 60 s
- TTL do token de embed
- 59/62
- testes do backend passando