Jamisson Pinho Lima
04 Portal Core 2025

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 03
§ 01

O 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.

§ 02

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.

§ 03

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 produzir
reservadoexige subir o stack local e semear dados
Portal de aplicações, com captura pendentefig. 01
reservadoo diagrama do repositório é ASCII e não serve para tela
Diagrama de arquitetura, a redesenharfig. 02

Pendente 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