Fluxo completo de comunicação
O govbr-auth atua no backend da aplicação. O frontend chama a API, e a
API coordena o fluxo OAuth/OIDC.
Visão geral
O mesmo adapter pode usar Gov.br oficial ou FakeGov; somente o runtime muda. O FakeGov é um simulador do provedor, não o frontend da aplicação.
Fluxo recomendado
GOVBR_REDIRECT_URI aponta para o callback da API:
GOVBR_REDIRECT_URI=https://api-dev.example.com/auth/govbr/callback
O frontend inicia /auth/govbr/login. Depois da autorização, o navegador
retorna ao callback; o adapter verifica uma prova de navegador independente
do state antes de qualquer troca de código. O core valida a transação,
troca o código com PKCE, valida o ID Token e consulta userinfo.
Use HTTPS em toda comunicação com o provedor oficial. Em mobile, o fluxo deve
abrir no navegador nativo, sem WebView. A página que recebe o code deve
redirecionar após o callback, e a aplicação deve criar sua própria sessão.
Armazene tokens no backend; o access token é usado para APIs autorizadas e o
ID token é usado para identificação, sem ser enviado a APIs. O logout deve ser
iniciado pelo frontend pela rota configurada e retornar ao destino previamente
autorizado.
No README, a versão animada percorre as doze setas em ordem com um marcador verde, em um ciclo de 24 segundos. Todos os textos permanecem visíveis. Quando a preferência por movimento reduzido está ativada no sistema ou navegador, essa versão também permanece estática.
Provedor oficial
Com GOVBR_PROVIDER=official, as chamadas vão aos endpoints oficiais
configurados. O core valida assinatura, algoritmo, issuer, audience, claims
temporais, state, PKCE e nonce.
FakeGov na API
Com GOVBR_PROVIDER=fake, as rotas FakeGov são montadas na mesma API e as
chamadas internas usam FakeGovHttpTransport. O código consumidor permanece
igual. Os adapters podem montar a página inicial de demonstração na raiz /,
mas mantêm o callback sob controle do on_success da aplicação. Para a
experiência visual completa, use o launcher python -m govbr_auth.fake: ele
abre a autenticação em uma nova guia ou janela nativa e atualiza a página
original depois da validação do callback.
FakeGov compartilhado
O launcher local usa loopback. Um ambiente compartilhado exigiria origem pública explícita, TLS, isolamento de dados de teste e controles administrativos; não é oferecido por esta versão.
Ciclo de vida em WSGI
Django e Flask executam as operações assíncronas em um loop dedicado, criado sob demanda por processo. As autenticações consecutivas e concorrentes usam o mesmo loop, inclusive para fechar clientes HTTP de propriedade do adapter. O contexto de cada chamada é preservado sem compartilhar variáveis de contexto entre requisições.
Prefira fornecer settings ao adapter e chamar auth.close() no
encerramento do worker. Um runtime fornecido pela aplicação é emprestado: o
adapter não o fecha. Para encerrar um runtime usado por WSGI no mesmo loop,
use govbr_auth.adapters._sync.run_sync(runtime.aclose); não use
asyncio.run(runtime.aclose()) em um loop diferente.
Crie e utilize os recursos HTTP depois do fork do worker. Não compartilhe um runtime HTTP já utilizado com outro processo ou loop ASGI independente. O loop WSGI não altera o ciclo de vida nativo do adapter FastAPI.