Pular para conteúdo

Checklist — Entra App role + gateway B2B (AUTH-14.6)

Operações para habilitar integração app-only (client_credentials) no mesmo perímetro Modo B humano.

Perfil Itaú (AUTH-14.10): se o cliente usa STS openid.itau.com.br com scope (sem App role Entra), use checklist_b2b_itau_sts_cc.md em vez deste checklist Entra.

Relacionado: integracao_b2b_entra_app_only.md · gateway_access_token_entra.md


1. Microsoft Entra ID

API eCosif (resource server)

  • [ ] App Registration da API eCosif identificada (Application ID URI = api://{api-client-id})
  • [ ] App role de aplicação criada (ex.: Ecosif.Api.Access ou nome acordado com o cliente)
  • [ ] ECOSIF_AZURE_APP_REQUIRED_ROLES no backend alinhada ao valor da role no token (roles claim)

App do integrador (confidential client)

  • [ ] App Registration do integrador criada (confidential client)
  • [ ] Secret ou certificado gerado e armazenado no vault do cliente (nunca no eCosif)
  • [ ] Application permission para a App role da API eCosif adicionada
  • [ ] Admin consent concedido no tenant
  • [ ] Object id (oid) do service principal do integrador anotado para onboarding eCosif

Validação STS

curl -sS -X POST "https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=${INTEGRATOR_CLIENT_ID}" \
  -d "client_secret=${INTEGRATOR_CLIENT_SECRET}" \
  -d "grant_type=client_credentials" \
  -d "scope=api://${API_CLIENT_ID}/.default"
  • [ ] Resposta HTTP 200 com access_token
  • [ ] Payload em jwt.ms: aud = api://…, roles presente, idtyp=app (quando emitido)
  • [ ] appid/azp = client id do integrador

2. eCosif (backend + auth)

  • [ ] ECOSIF_API_TOKEN_MODE=AZURE_ENTERPRISE_GATEWAY nas 5 APIs + gateway
  • [ ] ECOSIF_ENABLE_AZURE_APP_ONLY=true (homolog/prod B2B)
  • [ ] ECOSIF_AZURE_TENANT_ID e ECOSIF_AZURE_API_AUDIENCE iguais ao Modo B humano
  • [ ] ECOSIF_AZURE_APP_ALLOWED_CLIENT_IDS preenchido em produção banco (allowlist appid/azp)
  • [ ] Usuário técnico criado em gr_user + escopo gr_filial_usuario
  • [ ] Vínculo B2B cadastrado via POST /api/admin/b2b-app-links (auth) ou seed homolog versionado
  • [ ] Flyway ≥ V0.7.00.15 aplicado (comments provider AZURE_ENTERPRISE_APP)

3. API Gateway

Regras comuns (Modo B + B2B)

  • [ ] Issuer: https://login.microsoftonline.com/{tenant-id}/v2.0
  • [ ] Audience: api://{api-client-id} (= ECOSIF_AZURE_API_AUDIENCE)
  • [ ] JWKS / OpenID discovery configurados
  • [ ] JWT ECOSIF (HS256) rejeitado nas rotas /ecosif-*

Específico app-only

  • [ ] Policy não exige claim scp (delegated)
  • [ ] Token com roles (App role) aceito quando assinatura/aud/iss OK
  • [ ] (Recomendado prod banco) Allowlist de appid ou azp no gateway ou WAF upstream
  • [ ] Rotas públicas inalteradas: /api/auth/external-login, /api/auth/signin, health

Azure API Management

Ver XML de exemplo em integracao_b2b_entra_app_only.md §10.

  • [ ] <validate-jwt> sem required-claims para scp
  • [ ] Allowlist customizada documentada no runbook do cliente (se aplicável)

AWS API Gateway

  • [ ] JWT Authorizer com issuer + audience corretos
  • [ ] Allowlist de client id via Lambda authorizer (se exigido pelo cliente)

4. Homologação rápida (pré AUTH-14.9)

# Caso Esperado
1 Humano Enterprise → API 200
2 App vinculado + role OK → endpoint piloto 200
3 App sem vínculo 401 backend
4 Token sem role / aud errado 401 gateway ou backend
5 JWT ECOSIF no gateway 401 gateway
6 Logs ecosif.auth.m2m outcome=… sem Bearer completo

5. Referências

Documento Conteúdo
integracao_b2b_entra_app_only.md Fluxo completo B2B
manual_implantacao_b2b_entra_app_only.md Runbook implantação
auth14_entrega_tecnica_b2b_app_only.md Entrega técnica
variaveis_autenticacao_baseline.md Vars ECOSIF_AZURE_APP_*
autenticacao.md API onboarding /api/admin/b2b-app-links
identity_provider_link_b2b_app.md Modelo BD