🧩 Frameworks
FastAPI
from fastapi import FastAPI
from govbr_auth import GovBrConnector, GovBrConfig
config = GovBrConfig.from_env()
def handle_auth_success(data, request):
"""Callback após autenticação bem-sucedida"""
user = data["id_token_decoded"]
return {
"mensagem": "Login efetuado com sucesso!",
"usuario": user["name"],
"cpf": user["sub"]
}
app = FastAPI()
connector = GovBrConnector(
config,
prefix="/auth/govbr",
authorize_endpoint="authorize",
authenticate_endpoint="authenticate",
on_auth_success=handle_auth_success,
)
connector.init_fastapi(app)
# Endpoints criados:
# GET /auth/govbr/authorize -> Retorna URL OAuth
# POST /auth/govbr/authenticate -> Troca code+state por token
Executar:
uvicorn seu_arquivo:app --reload
Flask
from flask import Flask, jsonify
from govbr_auth import GovBrConnector, GovBrConfig
config = GovBrConfig.from_env()
def handle_auth_success(data, request):
"""Callback após autenticação bem-sucedida"""
user = data["id_token_decoded"]
return jsonify({
"mensagem": "Login efetuado com sucesso!",
"usuario": user["name"],
"cpf": user["sub"]
})
app = Flask(__name__)
connector = GovBrConnector(
config,
prefix="/auth/govbr",
authorize_endpoint="authorize",
authenticate_endpoint="authenticate",
on_auth_success=handle_auth_success,
)
connector.init_flask(app)
# Endpoints criados:
# GET /auth/govbr/authorize -> Retorna URL OAuth
# POST /auth/govbr/authenticate -> Troca code+state por token
Executar:
flask run
Django
Em urls.py:
from django.urls import path
from govbr_auth import GovBrConnector, GovBrConfig
config = GovBrConfig.from_env()
def handle_auth_success(data, request):
"""Callback após autenticação bem-sucedida"""
from django.http import JsonResponse
user = data["id_token_decoded"]
return JsonResponse({
"mensagem": "Usuário autenticado!",
"nome": user.get("name"),
"cpf": user.get("sub")
})
connector = GovBrConnector(
config,
prefix="auth/govbr",
authorize_endpoint="authorize",
authenticate_endpoint="authenticate",
on_auth_success=handle_auth_success,
)
urlpatterns = [
*connector.init_django(),
]
# Endpoints criados:
# GET auth/govbr/authorize -> Retorna URL OAuth
# POST auth/govbr/authenticate -> Troca code+state por token
Executar:
python manage.py runserver
Stack Personalizada
Para frameworks não suportados ou APIs customizadas, use a API de baixo nível:
Async:
from govbr_auth.core.govbr import GovBrAuthorize, GovBrIntegration
authorize = GovBrAuthorize(config)
auth_url_result = await authorize.build_authorize_url()
integration = GovBrIntegration(config)
result = await integration.async_exchange_code_for_token(code, state)
Sync:
from govbr_auth.core.govbr import GovBrAuthorize, GovBrIntegration
authorize = GovBrAuthorize(config)
auth_url_result = authorize.build_authorize_url_sync()
integration = GovBrIntegration(config)
result = integration.exchange_code_for_token_sync(code, state)
Comparação de Frameworks
Framework |
Suportado |
Async |
Status Codes |
Autenticação Fake |
|---|---|---|---|---|
FastAPI |
✅ |
✅ |
400/401 |
✅ Automático |
Flask |
✅ |
❌ |
400/401 |
✅ Automático |
Django |
✅ |
❌ |
400/401 |
Parcial |
Custom |
✅ |
✅/❌ |
Você define |
Manual |
Callbacks de Sucesso
O on_auth_success é chamado após autenticação bem-sucedida:
def on_auth_success(data, request):
"""
Args:
data: {
"token": {raw token response},
"id_token_decoded": {user claims}
}
request: Request object (FastAPI/Flask/Django)
Returns:
Qualquer coisa que seu framework aceita como resposta
"""
user = data["id_token_decoded"]
return {
"status": "ok",
"user_cpf": user["sub"],
"user_name": user["name"],
"user_email": user["email"],
}
Para FastAPI (async):
async def on_auth_success(data, request):
# Pode fazer operações async aqui
user_id = data["id_token_decoded"]["sub"]
await db.save_user(user_id)
return {"status": "ok"}
Tratamento de Erros
Os frameworks implementam tratamento automático:
GovBrException → HTTP 400 (erro de configuração)
GovBrAuthenticationError → HTTP 401 (erro de autenticação)
Customize com try/catch se precisar:
from govbr_auth import GovBrAuthenticationError
try:
result = await integration.async_exchange_code_for_token(code, state)
except GovBrAuthenticationError as e:
# Log, registre tentativa, etc
return {"error": "Autenticação falhou"}