4.3 KiB
Login gov.br no SAPL
Este documento registra a integração do SAPL com o Login Único gov.br por
OpenID Connect. Ele serve como referência para revisar, publicar no GitHub da
equipe e depois espelhar a alteração no repositório de produção
Camara-Indaiatuba/SAPL.git.
Escopo da alteração
- adiciona o cliente OIDC gov.br em
sapl/base/govbr.py; - expõe as rotas
/login/govbr/,/auth/govbr/callback/e a rota legada/login/govbr/callback/; - exibe o botão "Entrar com GOV.BR" na tela de login apenas quando a integração está habilitada;
- valida
state,nonce, assinatura RS256 via JWK,audienceeissuer; - resolve o usuário local pelo CPF retornado pelo gov.br, procurando por
usernamepor padrão e opcionalmente por e-mail verificado; - permite criação automática de usuário quando
GOVBR_AUTO_CREATE_USERS=True; - redireciona o logout para o encerramento da sessão gov.br quando a sessão foi autenticada por esse provedor;
- adiciona
requestsePyJWT[crypto]como dependências de runtime; - adiciona testes para renderização do botão, início do fluxo OIDC e resolução do usuário por CPF.
Variáveis de ambiente
As variáveis abaixo ficam em sapl/settings.py e podem ser configuradas no
.env, Docker Compose ou ambiente de produção.
GOVBR_LOGIN_ENABLED=True
GOVBR_SSO_BASE_URL=https://sso.staging.acesso.gov.br
GOVBR_CLIENT_ID=<client-id-fornecido-pelo-govbr>
GOVBR_CLIENT_SECRET=<client-secret-fornecido-pelo-govbr>
GOVBR_SCOPE=openid email profile govbr_confiabilidades govbr_confiabilidades_idtoken
GOVBR_REDIRECT_URI=https://sapl.indaiatuba.tec.br/auth/govbr/callback/
GOVBR_POST_LOGOUT_REDIRECT_URI=https://sapl.indaiatuba.tec.br
GOVBR_USER_LOOKUP_FIELDS=username
GOVBR_AUTO_CREATE_USERS=False
Variáveis avançadas, úteis se o gov.br entregar URLs específicas junto com a credencial:
GOVBR_ISSUER=
GOVBR_AUTHORIZE_URL=
GOVBR_TOKEN_URL=
GOVBR_JWK_URL=
GOVBR_LOGOUT_URL=
GOVBR_REQUEST_TIMEOUT=10
GOVBR_JWT_LEEWAY=30
GOVBR_STATE_MAX_AGE=600
Para homologação, o valor padrão de GOVBR_SSO_BASE_URL aponta para
https://sso.staging.acesso.gov.br. Em produção, confirmar a URL final no
cadastro da credencial gov.br antes de ativar a integração.
Cadastro da aplicação no gov.br
Solicitar credenciais de teste/homologação e produção no Serviço de Integração aos Produtos do Ecossistema da Identidade Digital GOV.BR.
Cadastrar pelo menos estas URLs na credencial:
Redirect URI: https://sapl.indaiatuba.tec.br/auth/govbr/callback/
URL de logout: https://sapl.indaiatuba.tec.br
O roteiro técnico gov.br exige HTTPS para o fluxo de autenticação e recomenda domínio oficial de governo para credenciais de produção.
Vínculo com usuários locais
Por padrão, o SAPL procura uma conta local cujo username seja o CPF retornado
pelo gov.br, aceitando CPF apenas com dígitos ou no formato 000.000.000-00.
Para procurar também por e-mail verificado:
GOVBR_USER_LOOKUP_FIELDS=username,email
Use GOVBR_AUTO_CREATE_USERS=True somente se a criação automática já estiver
aprovada pela regra operacional da Câmara. Usuários criados automaticamente ficam
sem senha local utilizável e usam o CPF como username.
Checklist para produção
- Abrir uma branch dedicada a partir de
3.1.x. - Incluir somente os arquivos do escopo gov.br no commit.
- Configurar as variáveis no ambiente de produção, sem versionar segredo.
- Garantir que os usuários locais que usarão gov.br tenham
usernameigual ao CPF, ou ajustarGOVBR_USER_LOOKUP_FIELDS. - Executar migrações existentes do SAPL, se houver pendência do ambiente.
- Executar
python manage.py check. - Executar
pytest sapl/base/tests/test_login.py -q. - Validar manualmente a tela
/login/, o redirecionamento para gov.br e o retorno em/auth/govbr/callback/. - Publicar a branch no GitHub da equipe.
- Abrir PR para
Camara-Indaiatuba/SAPL.git, base3.1.x, descrevendo configuração, impacto e validações.
Referências
- Roteiro técnico gov.br: https://acesso.gov.br/roteiro-tecnico/iniciarintegracao.html
- Solicitação de credencial gov.br: https://acesso.gov.br/roteiro-tecnico/solicitacaocredencialprocesso.html
- pytest-django 4.5.2: https://pypi.org/project/pytest-django/4.5.2/