Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

govbr-auth

Autenticação Gov.br para Python com um core OAuth 2.0/OpenID Connect independente de framework e adapters opcionais para FastAPI, Django e Flask.

O fluxo OAuth é stateless no backend: funciona com múltiplos workers, sem armazenamento compartilhado, desde que todos usem a mesma secret GOVBR_TRANSACTION_SECRET.

Python 3.11+ License: MIT Core FakeGov

[!IMPORTANT] Este é um projeto comunitário, sem manutenção, homologação ou endosso do Governo Federal. O FakeGov é um simulador local: use nele somente credenciais e dados pessoais fictícios. Essa restrição é exclusiva ao FakeGov; para uma integração real, configure a biblioteca com o provedor oficial.

Teste a integração sem depender do Gov.br

FakeGov é um provedor OAuth/OIDC local incluído na biblioteca. Ele permite desenvolver, demonstrar e testar o fluxo completo sem credenciais oficiais, sem acesso à internet e sem alterar o código consumidor.

Instalar, iniciar, entrar e concluir o fluxo local com FakeGov

Instalar → Iniciar → Entrar → Concluir. O caminho demonstrativo exercita o mesmo core de autenticação usado pelos adapters.

Experimente localmente

No POSIX:

pip install "govbr-auth[fake]"
cat > fake-users.local.json <<'JSON'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
JSON
GOVBR_FAKE_USERS_FILE="$PWD/fake-users.local.json" GOVBR_FAKE_END_TO_END=true python -m govbr_auth.fake

No PowerShell:

pip install "govbr-auth[fake]"
@'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
'@ | Set-Content -Encoding UTF8 .\fake-users.local.json
$env:GOVBR_FAKE_USERS_FILE = "$PWD\fake-users.local.json"
$env:GOVBR_FAKE_END_TO_END = "true"
python -m govbr_auth.fake

Abra http://localhost:8000, clique em Entrar com Gov.br e use o CPF 11122233344 com a senha senha-ficticia. O launcher escuta apenas em loopback e não exibe CPF, senha, tokens ou segredos nas respostas.

Use FakeGov na sua aplicação

O exemplo abaixo é copiável e executável em um diretório vazio.

pip install "govbr-auth[fastapi,fake]"

Crie myapp.py:

from fastapi import FastAPI
from fastapi.responses import JSONResponse
from govbr_auth.fastapi import AuthContext, GovBrAuth

app = FastAPI()

async def authenticated(context: AuthContext):
    return JSONResponse({"authenticated": True})

auth = GovBrAuth(on_success=authenticated)
app.include_router(auth.router)

Crie usuários locais fictícios fora do Git:

cat > fake-users.local.json <<'JSON'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
JSON
export GOVBR_PROVIDER=fake
export GOVBR_FAKE_USERS_FILE="$PWD/fake-users.local.json"
uvicorn myapp:app --reload

No PowerShell:

@'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
'@ | Set-Content -Encoding UTF8 .\fake-users.local.json
$env:GOVBR_PROVIDER = "fake"
$env:GOVBR_FAKE_USERS_FILE = "$PWD\fake-users.local.json"
uvicorn myapp:app --reload

Abra http://127.0.0.1:8000/auth/govbr/login, use CPF 11122233344 e senha senha-ficticia, e conclua o callback. A resposta de exemplo renderiza somente {"authenticated": true}; CPF, senha, tokens e segredos não são exibidos em respostas HTTP.

Com GOVBR_PROVIDER=fake, a aplicação mantém o mesmo runtime consumidor e a mesma fachada GovBrAuth: o modo fake troca apenas os endpoints do provedor e o transporte HTTP interno (FakeGovHttpTransport). Para composições avançadas, o simulador canônico é govbr_auth.fake.FakeGovSimulator, criado por govbr_auth.fake.create_fake_gov_simulator.

No Django, inclua auth.urlpatterns no urlpatterns do projeto. No Flask, registre os dois blueprints condicionais com auth.register(app). Em ambos os casos, o código do consumidor permanece o mesmo; só a configuração do provedor é alterada.

Os exemplos completos de FastAPI, Django e Flask no guia de início rápido criam os arquivos da aplicação no diretório do usuário e funcionam após a instalação do extra correspondente; não dependem de um checkout deste repositório.

Instalação

Instale somente o core ou o extra correspondente à aplicação:

pip install govbr-auth                 # somente o core
pip install "govbr-auth[fastapi]"      # adapter FastAPI
pip install "govbr-auth[fastapi,fake]" # FastAPI + FakeGov + uvicorn
pip install "govbr-auth[django]"       # adapter Django
pip install "govbr-auth[flask]"        # adapter Flask
pip install "govbr-auth[fake]"         # launcher FakeGov

Como a comunicação funciona

A aplicação expõe /auth/govbr/login e /auth/govbr/callback. Depois do login, o backend troca o código no endpoint token, busca as chaves em jwk, valida o ID Token e consulta userinfo antes de chamar on_success.

Com GOVBR_PROVIDER=official, essas chamadas vão para o Gov.br. Com GOVBR_PROVIDER=fake, as rotas FakeGov são montadas no mesmo router e o backend usa FakeGovHttpTransport. Em outras palavras: é o mesmo runtime consumidor, e a configuração fake troca apenas os endpoints do provedor e o transporte HTTP interno. O fluxo end-to-end do launcher também inclui a página inicial. O diagrama completo está em docs/guide/communication-flow.rst.

Para desenvolvimento, execute a aplicação com GOVBR_PROVIDER=fake. A mesma fachada e as mesmas rotas do backend são usadas com o provedor oficial; somente a composição selecionada pela configuração muda.

Somente o provedor FakeGov

Sem GOVBR_FAKE_END_TO_END=true, python -m govbr_auth.fake inicia apenas o provedor/login, sem a página inicial demonstrativa. Esse modo atende uma aplicação local executada em outro processo; o servidor continua restrito a loopback.

Customizar usuários

Defina GOVBR_FAKE_USERS_FILE com um JSON fora do Git:

cat > fake-users.local.json <<'JSON'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
JSON
export GOVBR_FAKE_USERS_FILE="$PWD/fake-users.local.json"

No PowerShell:

@'
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}
'@ | Set-Content -Encoding UTF8 .\fake-users.local.json
$env:GOVBR_FAKE_USERS_FILE = "$PWD\fake-users.local.json"
{"users": [{"cpf": "11122233344", "password": "senha-ficticia", "name": "Usuário Fake", "email": "fake@example.test"}]}

O arquivo substitui os usuários defaults, é validado na inicialização e fica em memória; não use credenciais reais. Para fontes próprias, implemente o protocolo de repositório descrito no guia de FakeGov.

Provedor oficial

Instale a biblioteca sem extras e configure GOVBR_PROVIDER=official (o default), endpoints, credenciais, redirect e GOVBR_TRANSACTION_SECRET. Gere uma vez o segredo:

from govbr_auth import generate_transaction_secret

print(generate_transaction_secret())

Mantenha o valor secreto e use o mesmo valor em todas as instâncias. Não gere uma chave nova a cada inicialização. O backend cifra e autentica com Fernet um envelope de state com TTL, PKCE e nonce. O state não é um registro de uso único: a prevenção de replay depende do authorization code de uso único validado pelo provedor.

Esse desenho permite múltiplos workers sem armazenamento compartilhado; todos precisam receber a mesma secret GOVBR_TRANSACTION_SECRET. Em produção, por exemplo:

uvicorn myapp:app --workers 4

Consulte a documentação para configuração completa, solução de problemas e uso avançado.

Desenvolvimento

python -m pip install -r requirements-dev.txt
python -m pytest --tb=short --disable-warnings -q

Licença

MIT. Consulte LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

govbr_auth-1.0.0rc1.tar.gz (53.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

govbr_auth-1.0.0rc1-py3-none-any.whl (67.3 kB view details)

Uploaded Python 3

File details

Details for the file govbr_auth-1.0.0rc1.tar.gz.

File metadata

  • Download URL: govbr_auth-1.0.0rc1.tar.gz
  • Upload date:
  • Size: 53.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for govbr_auth-1.0.0rc1.tar.gz
Algorithm Hash digest
SHA256 1c6695e68ba3d46d8ea05899b1f13982fe583ac804a4e843093c1498b5c38723
MD5 3d316f744a595095f4e2d8ab3fc2acc4
BLAKE2b-256 3575d6051c7dec2d23495267dd738d4ebee88dd47f25a7b7de2bc6932343ab60

See more details on using hashes here.

Provenance

The following attestation bundles were made for govbr_auth-1.0.0rc1.tar.gz:

Publisher: pythonpublish.yml on cereja-project/govbr_auth

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file govbr_auth-1.0.0rc1-py3-none-any.whl.

File metadata

  • Download URL: govbr_auth-1.0.0rc1-py3-none-any.whl
  • Upload date:
  • Size: 67.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for govbr_auth-1.0.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 e080acea9cda012ca212cf46310a9c280da4f5d34f98dffe8c66c0b1f2da7d98
MD5 f800d93b20a70af3e632ba32004fa760
BLAKE2b-256 93fc68a4ff59ef552849b772e5a23d07a5ab65b198ac25412f7aef81939fb90a

See more details on using hashes here.

Provenance

The following attestation bundles were made for govbr_auth-1.0.0rc1-py3-none-any.whl:

Publisher: pythonpublish.yml on cereja-project/govbr_auth

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.0.0

2 files

This release

1.0.0rc1 This release

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page