❓ Perguntas Frequentes
========================
Qual é a diferença entre modo fake e produção?
-----------------------------------------------
.. list-table::
:header-rows: 1
* - Aspecto
- Modo Fake
- Produção
* - Cadastro no Gov.br
- ❌ Não necessário
- ✅ Obrigatório
* - Segurança
- ⚠️ Baixa (dev only)
- ✅ Alta (PKCE, JWKS)
* - Verificação JWT
- Hard-coded secret
- Chaves públicas (RSA)
* - Usuários
- Pré-configurados
- Reais do Gov.br
* - HTTPS
- ❌ HTTP ok
- ✅ Obrigatório
* - Sessão
- Em memória
- Destruída ao reiniciar
Como gerar o `cript_verifier_secret`?
-------------------------------------
Use a função auxiliar::
from govbr_auth.utils import generate_cript_verifier_secret
secret = generate_cript_verifier_secret()
print(secret) # Vvd9H5VC2Aqk-dwFOJX6MvQTuZZARmb37y7un9wkj0c=
Copie e cole em seu `.env` ou variáveis de ambiente.
⚠️ Não compartilhe este valor!
Como migrar de modo fake para produção?
---------------------------------------
1. **Cadastre sua aplicação no Gov.br**
- Acesse `acesso.gov.br `_
- Siga o roteiro técnico
- Receba `client_id` e `client_secret`
2. **Atualize a configuração**
::
# .env
USE_FAKE_GOVBR=false
GOVBR_CLIENT_ID=seu-client-id-real
GOVBR_CLIENT_SECRET=seu-client-secret-real
GOVBR_AUTH_URL=https://sso.acesso.gov.br/authorize
GOVBR_TOKEN_URL=https://sso.acesso.gov.br/token
GOVBR_REDIRECT_URI=https://seu-app.com/auth/govbr/callback
3. **Remova a configuração fake**
::
# Remova: govbr_auth_url/token_url apontando para localhost
# Remova: fake_users do GovBrConnector
4. **Teste em staging primeiro**
::
GOVBR_AUTH_URL=https://sso.staging.acesso.gov.br/authorize
GOVBR_TOKEN_URL=https://sso.staging.acesso.gov.br/token
5. **Valide HTTPS e certificados**
- HTTPS obrigatório
- Certificados válidos
- Redirect URI registrado
Qual é a diferença entre `code` e `code_verifier`?
--------------------------------------------------
- **`code`**: Autorização temporária retornada pelo Gov.br
- Enviada ao backend por você
- Válida por ~10 minutos
- **`code_verifier`**: Prova criptográfica PKCE
- Gerada e criptografada pelo backend
- Recuperada do `state` durante token exchange
- Nunca exposta ao navegador
O `code` sozinho **não é suficiente** - o backend precisa provar que gerou o verifier correspondente.
Por que meu `state` é inválido?
------------------------------
Possíveis causas:
1. **`cript_verifier_secret` mudou**
- State foi criptografado com SECRET_A
- Backend agora usa SECRET_B
- Descriptografia falha
**Solução**: Use o mesmo secret em todos os deployments
2. **Sessão expirou**
- State válido por ~15 minutos
- Usuário esperou muito para fazer login
**Solução**: Gere novo authorize URL
3. **URL corrompida**
- State foi truncado ou modificado em trânsito
- Proxy/firewall removeu caracteres
**Solução**: Verifique logs, use HTTPS
Como debugar erros de autenticação?
----------------------------------
**Ative logging DEBUG**::
import logging
logging.basicConfig(level=logging.DEBUG)
**Erros comuns**:
- `"Invalid or missing code_verifier"` → State inválido/expirado
- `"JWT signature verification failed"` → Token fake ou secret errado
- `"Token de ID não encontrado na resposta"` → Gov.br retornou erro
Verifique o `.env` e logs do servidor.
Posso usar com mobile?
--------------------
Não diretamente, mas é possível:
**Opção 1: API Backend**
- App mobile → Backend GovBR Auth → Gov.br
- Backend retorna dados do usuário (JSON)
- Seguro, recomendado
**Opção 2: WebView**
- App mobile → WebView com sua página de login
- WebView redireciona a Gov.br
- Recupera callback com `code` + `state`
- Envia ao backend para trocar por token
**Opção 3: Redirect com Deep Link**
- App mobile → Gov.br (native)
- Gov.br redireciona via deep link
- App recupera `code` + `state`
- Envia ao backend
Recomendamos **Opção 1** por ser mais segura.
Preciso de dois deployments distintos (produção + staging)?
----------------------------------------------------------
Sim. Você precisa registrar os dois:
**Staging (Gov.br Staging)**::
GOVBR_AUTH_URL=https://sso.staging.acesso.gov.br/authorize
GOVBR_TOKEN_URL=https://sso.staging.acesso.gov.br/token
GOVBR_CLIENT_ID=seu-staging-client-id
**Produção (Gov.br Produção)**::
GOVBR_AUTH_URL=https://sso.acesso.gov.br/authorize
GOVBR_TOKEN_URL=https://sso.acesso.gov.br/token
GOVBR_CLIENT_ID=seu-production-client-id
Cada um com `redirect_uri` correspondente registrado no Gov.br.
Como resetar usuários fake?
--------------------------
O modo fake armazena sessões em memória. Ao reiniciar o servidor::
uvicorn seu_app:app --reload
Todas as sessões são limpas e usuários voltam aos padrões.
Para customizar usuários fake::
from govbr_auth import FakeUserData, GovBrConnector
fake_users = {
"12345678901": FakeUserData(
cpf="12345678901",
nome="Meu Usuário",
email="user@example.com",
)
}
connector = GovBrConnector(config, fake_users=fake_users)
Qual versão do Python é suportada?
---------------------------------
Python 3.8+ é obrigatório.
Testado em:
- Python 3.8
- Python 3.9
- Python 3.10
- Python 3.11
- Python 3.12
- Python 3.13
Como reportar bugs?
------------------
Abra uma issue no GitHub:
`github.com/cereja-project/govbr_auth/issues `_
Por favor inclua:
- Versão do Python
- Versão da biblioteca (`pip show govbr-auth`)
- Framework usado (FastAPI/Flask/Django)
- Stack trace completo
- `.env` (sem secrets!)