Spike AUTH-14.10 — claims Itaú STS CC e convivência dual-issuer
PLANID: AUTH-14.10.1
Data: 2026-09-02
Escopo: contrato de claims Itaú CC; gap vs AUTH-14 Entra; matriz de classificação humano vs M2M.
1. Contexto
Cliente Itaú informou que não possui permissão para criar service principal com App role Entra. O integrador B2B usa STS interno (openid.itau.com.br) com Client Credentials e claim scope — mesmo namespace de scopes do QW4 humano.
AUTH-14 (0.7.08.202608301) implementa perfil Microsoft app-only (roles). Este spike documenta o segundo perfil necessário.
2. Respostas do cliente (2026-09-02)
| # |
Pergunta |
Resposta |
| 1 |
Login humano — qual issuer? |
Somente Azure (login.microsoftonline.com) |
| 2 |
Gateway |
Valida scope no authorizer |
| 3 |
Token Itaú |
Payload CC fornecido (ver §3) |
| 4 |
aud |
Emissor não envia aud — backend usa NONE (sem validação de audience) |
| 5 |
Identificador integrador |
sub = client id de quem chama; DEV fixo (lambda emissora) |
| 6 |
Scopes |
Mesmos scopes do humano QW4 |
3. Payload referência (DEV)
{
"iss": "https://openid.itau.com.br/api/oauth/token",
"sub": "e19c3d92-3603-4a89-923a-1a4bba633591",
"exp": 1788290226,
"iat": 1788286626,
"Access_Token": "2aa3fe95.0d7e7bba-19f9-4017-970b-205406e5442c",
"usr": "null",
"flow": "CC",
"source": "INT",
"site": "ctmm1",
"env": "D",
"mbi": "true",
"aut": "",
"scope": "appid-42e02f44-8897-4513-978b-3ce788b41e27 qw4-balancetes-fundos-investimentos.read resource.READ"
}
4. Classificação de perfil (alvo implementação)
| Critério |
Humano Azure |
M2M Itaú CC |
iss |
login.microsoftonline.com/... |
openid.itau.com.br/... |
flow |
— |
CC |
usr |
usuário presente |
"null" |
| Autorização |
scp (delegated) |
scope (string) |
aud |
api://{client-id} típico |
omitido — identidade M2M via sub + scope |
| Lookup BD |
AZURE_ENTERPRISE |
AZURE_ENTERPRISE_APP |
| Chave vínculo |
oid / sub pessoa |
sub client id |
5. Gap vs código atual (AUTH-14.3)
| Capacidade |
Estado |
Gap |
Detector isAppOnlyToken |
roles / idtyp / ausência scp |
Token Itaú tem scope, não roles — não detectado |
validateAccess |
ECOSIF_AZURE_APP_REQUIRED_ROLES |
Precisa REQUIRED_SCOPES |
| Allowlist |
appid/azp |
Precisa sub |
| JwtDecoder |
Issuer Microsoft único |
Precisa multi-issuer + JWKS Itaú |
| Audience |
ECOSIF_AZURE_API_AUDIENCE |
Perfil Itaú: ECOSIF_ITAU_STS_AUDIENCE_MODE=NONE (sem aud) |
| Propagação |
5 APIs via starter |
OK após implementar no starter |
6. Matriz HTTP esperada (pós-14.10)
| Cenário |
Gateway |
Backend |
| Humano Azure OK |
200 |
200 |
| CC scope OK + vínculo |
200 |
200 |
| CC scope OK sem vínculo |
200 |
401 AUTH_IDP_NOT_LINKED |
| CC scope insuficiente |
403 |
— ou 401 |
| CC flag off |
200 |
401 app_only_disabled |
| JWT ECOSIF |
401 |
— |
7. Pendências cliente
- [ ] URL JWKS
openid.itau.com.br
- [ ]
sub PROD
- [ ] Obrigatoriedade de
resource.READ e appid-{guid} no scope
- [ ] Confirmação: backend revalida JWT ou confia só gateway?
8. Referências