Capacidade

Federação OIDC / OAuth 2.0

Uma relying party OpenID Connect completa na borda de acesso — tokens de identidade verificados, fluxos resistentes a replay e roteamento de IdP por tenant.

Os IdPs corporativos e de consumo modernos — Entra ID, Okta, Auth0, Google Workspace, GitHub, Keycloak — falam OpenID Connect sobre OAuth 2.0. Para novas aplicações, a abordagem correta não é manter uma base de usuários paralela; é conectar-se diretamente a esses IdPs. O TR7 AAM atua como uma relying party OIDC conforme aos padrões na frente da aplicação. O fluxo de código de autorização é iniciado com PKCE, nonce e state vinculado à sessão; o usuário autentica-se no IdP com o MFA e a política que aquele IdP aplica; o IdP retorna um código de autorização ao AAM; o AAM troca o código por tokens, busca o JWKS do IdP e verifica a assinatura, audience, issuer, janela de validade e nonce do token de identidade (ID token) antes de extrair a identidade. As claims do ID token verificado são mescladas com a resposta do endpoint userinfo e mapeadas para o ID de sessão canônico do AAM. Um único gateway AAM pode rotear aplicações diferentes para IdPs diferentes e tenants diferentes da mesma aplicação para IdPs diferentes, simultaneamente. Resultado: o restante do motor de acesso — acesso condicional, confiança de dispositivo, MFA na borda, Backend SSO — assenta sobre a sessão OIDC. Cada passo é auditado; os resultados da validação do ID token (assinatura, nonce, audience, issuer, validade) são eventos de auditoria de primeira classe, de modo que a equipe de segurança pode responder à pergunta "quem entrou por qual IdP e com qual resultado" a partir de um único fluxo.

OIDC + OAuth 2.0
Relying party conforme aos padrões — código de autorização, PKCE, ID tokens verificados via JWKS, defesas de nonce e state.
S256 PKCE
Método de code-challenge padrão — códigos interceptados não podem ser trocados por um atacante.
Cache JWKS compartilhado
TTL de 1 hora entre processos worker e instâncias de gateway; atualização em miss para rotação de chaves do IdP.

OIDC parece simples por fora — quando integrado por aplicação, está cheio de armadilhas

OpenID Connect, construído sobre OAuth 2.0, é o protocolo de identidade federada dominante para stacks modernos. Todo grande IdP corporativo o suporta; todo IdP de força de trabalho em nuvem o oferece; todo framework de aplicação moderno fornece uma biblioteca para ele. A parte que parece fácil é supor que algumas linhas de código de SDK por aplicação sejam suficientes.

Na prática, uma relying party OIDC que carrega tráfego de produção real tem uma longa lista de coisas a fazer corretamente. A assinatura do ID token deve ser verificada contra o JWKS publicado pelo IdP, selecionando a chave correta pelo kid, e o cache deve ser atualizado quando o IdP rotaciona chaves. A claim audience deve corresponder ao client ID configurado. O issuer deve corresponder ao issuer esperado configurado. A janela de validade deve ser verificada com uma tolerância limitada de desvio de relógio. O nonce dentro do ID token deve corresponder ao nonce que o AAM enviou na requisição de autorização — se não corresponder, não é um erro de parsing, é uma tentativa de replay.

A camada OAuth 2.0 subjacente tem suas próprias armadilhas. O state deve ser vinculado à sessão do usuário como proteção CSRF e ter um TTL curto. O PKCE deve ser usado (preferencialmente S256), de modo que um código de autorização interceptado não possa ser trocado por um atacante. Ataques de mixup — onde o atacante engana a relying party para falar com o IdP errado — são derrotados vinculando o callback a um IdP específico e validando o issuer de acordo. Em uma integração de SDK pura, nenhuma dessas defesas é automática.

A outra forma de falha é embutir o SDK OIDC diretamente em cada aplicação. Cada aplicação passa então a carregar separadamente suas próprias decisões de confiança, cache de JWKS, logs de auditoria e configuração de IdP. Uma única alteração de IdP torna-se um rollout coordenado em múltiplas aplicações. MFA, acesso condicional, confiança de dispositivo e comportamento de logout são resolvidos separadamente para cada aplicação, muitas vezes de forma inconsistente.

O lado operacional é igualmente importante. Atualizar o documento de discovery do IdP, lidar com a rotação de chaves de assinatura, roteamento de IdP diferente por tenant, mapeamentos de claims diferentes para aplicações diferentes e fluxos de logout não são pequenos detalhes adicionados depois. São partes fundamentais para que a federação OIDC funcione de forma segura e sustentável.

O lugar correto é a borda de acesso. OIDC deve ser verificado em um único ponto; deve ser gerenciado na mesma camada que autenticação, MFA, acesso condicional, confiança de dispositivo e Backend SSO. Assim as aplicações não carregam a complexidade do protocolo de federação; recebem apenas uma identidade verificada, limpa e confiável.

Gerenciar OIDC corretamente não é apenas conectar-se a um IdP com um SDK. É verificar o ID token em um único ponto — no mesmo motor que MFA, acesso condicional, confiança de dispositivo e Backend SSO — de forma conforme aos padrões, auditá-lo e entregá-lo às aplicações com segurança.

Nossa abordagem

Um único gateway AAM termina o OIDC corretamente na borda; o restante do motor de acesso assenta sobre isso.

Relying party OpenID Connect completa mais cliente OAuth 2.0

Fluxo de código de autorização com PKCE, verificação de assinatura de ID token via JWKS, defesa de replay vinculada ao nonce, defesa CSRF vinculada ao state, aplicação de audience/issuer/validade. O mesmo motor fala OAuth 2.0 puro para IdPs que não emitem ID token; assim, provedores que fornecem apenas token e provedores OIDC completos compartilham uma única base de código.

Roteamento de IdP por aplicação e por tenant

Um único gateway AAM pode rotear aplicações diferentes para IdPs diferentes e tenants diferentes da mesma aplicação para IdPs diferentes, simultaneamente. A seleção de IdP é feita por requisição a partir do contexto da aplicação ou do tenant — sem gateway separado por IdP, sem seletor manual para o usuário.

Ataques de replay, CSRF e mixup derrotados por padrão

O nonce vincula o ID token à requisição de autorização que o solicitou; o state vincula o callback à sessão do usuário; o PKCE vincula a troca de código ao cliente público original. Nenhuma dessas é uma flag opcional que o integrador possa esquecer — é o próprio fluxo padrão.

Coordenado com MFA, acesso condicional, confiança de dispositivo e Backend SSO

Uma autenticação OIDC não funciona isoladamente — ela é orquestrada junto com MFA na borda (se o IdP não aplicou step-up), expressões de acesso condicional, avaliação contínua de confiança e injeção de Backend SSO em direção ao backend. O ID token torna-se uma entrada para a sessão AAM; não é a sessão inteira.

Capacidades

Relying party OIDC conforme aos padrões mais os recursos operacionais que tornam a federação segura e gerenciável em escala.

Fluxo de código de autorização com PKCE (padrão S256)

O AAM inicia o fluxo de código de autorização OAuth 2.0 com PKCE habilitado por padrão — code_challenge_method=S256, um code_verifier novo para cada requisição, nunca reutilizado. Um atacante que não gerou o verifier não pode trocar um código de autorização interceptado por tokens. PKCE simples permanece disponível para IdPs que o exigem; S256 é o padrão configurado.

Verificação da assinatura do ID token contra o JWKS do IdP

Quando o callback chega, o AAM busca o JWKS do IdP, seleciona a chave de assinatura a partir do cabeçalho kid do ID token e verifica a assinatura do ID token com o algoritmo especificado no cabeçalho (RS256 e o restante da família padrão). Um cache miss no kid atualiza o JWKS imediatamente; assim, uma rotação de chave do IdP não deixa logins válidos travados.

Audience, issuer, validade e nonce — não apenas parseados, mas aplicados

A claim audience do ID token deve incluir o client ID configurado; o issuer deve corresponder ao issuer esperado configurado; a janela de validade (exp/nbf) é aplicada com uma tolerância limitada de desvio de relógio; o nonce deve corresponder ao nonce que o AAM enviou na requisição de autorização. Uma divergência de nonce não é tratada como erro de parsing, mas como sinal de replay com seu próprio evento de auditoria.

Cache JWKS compartilhado com atualização em miss para rotação de chaves

As respostas JWKS são armazenadas em cache com um TTL de 1 hora em um repositório compartilhado entre processos worker e instâncias de gateway. Um cache hit elimina o round-trip de rede em cada login; um cache miss no kid solicitado dispara uma atualização instantânea a partir do JWKS URI; assim, a rotação rotineira de chaves do IdP não produz interrupção de login.

Parâmetros OIDC: scope, display, max_age, ui_locales, acr_values

Os parâmetros de autorização OIDC padrão são configuração de primeira classe: scope (openid é adicionado automaticamente), display para a experiência de login no IdP, max_age para reautenticação forçada, ui_locales para páginas de IdP localizadas e acr_values para solicitar uma classe de contexto de autenticação específica — útil para pedir ao IdP que aplique step-up MFA.

Perfis de provedor embutidos mais IdPs totalmente personalizados

Os perfis embutidos vêm com padrões sensatos para provedores comuns (endpoints well-known, JWKS URIs, hábitos de scope). Um caminho de IdP personalizado, onde endpoints, scopes e mapeamentos são fornecidos manualmente, permanece disponível para qualquer provedor OIDC ou OAuth 2.0 conforme aos padrões.

Claims do ID token mescladas com userinfo; claims assinadas têm prioridade

Após a verificação de assinatura, as claims do ID token são mescladas com a resposta do endpoint userinfo do IdP. Em caso de conflito, as claims assinadas do ID token têm prioridade sobre os campos não assinados do userinfo; assim, um atacante que adultera a resposta userinfo não pode alterar silenciosamente uma claim de identidade assinada.

Roadmap — RP-Initiated Logout, back-channel logout, registro dinâmico de cliente

RP-Initiated Logout (o logout front-channel assinado da especificação OIDC) e back-channel logout para notificações de término de sessão do IdP estão no roadmap. O registro dinâmico de cliente OIDC — provisionar uma nova aplicação registrando-a automaticamente no IdP — também está planejado. A infraestrutura de sessão e auditoria já está preparada para acomodar esses fluxos.

Profundidade operacional

A mecânica que mantém uma federação OIDC segura, atualizada e observável.

01

Vinculação de state com TTL de 10 minutos e verificação de sessão

O parâmetro state OAuth é armazenado contra a sessão do usuário com um TTL de 10 minutos. Quando o callback chega, o AAM verifica se o state pertence à mesma sessão que iniciou o fluxo — um atacante que reproduz um valor de state no navegador de outro usuário é rejeitado com um evento de auditoria OAUTH_STATE_MISMATCH.

02

Auditoria em cada salto de validação de ID token — por causa raiz

Quando a verificação de assinatura do ID token é pulada por uma razão operacional — JWKS inacessível, nenhum kid correspondente, JWK corrompido, JWKS URI ausente — um evento de auditoria dedicado registra a causa raiz específica. Os operadores podem distinguir uma interrupção temporária do JWKS de uma configuração incorreta ou de um tipo de chave não suportado, sem reler logs de runtime.

03

Tolerância limitada de desvio de relógio por IdP

Os ID tokens carregam timestamps iat, nbf e exp. Relógios reais derivam; o AAM aplica uma tolerância limitada de desvio de relógio (padrão de 60 segundos para o validador JWT subjacente); assim, um pequeno desvio não rejeita logins válidos, e desvios grandes — indicadores de má configuração ou replay — ainda são rejeitados.

04

Troca de token e userinfo com timeouts de rede endurecidos

As requisições de troca de token e userinfo contra o IdP usam timeouts limitados de conexão, DNS e total; assim, um IdP lento ou que não responde não pode ocupar os workers do gateway. A troca de token opera com um orçamento total de 30 segundos; o userinfo opera com um orçamento de 15 segundos; ambos têm orçamentos de conexão e DNS mais curtos; assim, as falhas falham rapidamente.

05

Auditoria por evento correlacionada à sessão AAM

Cada passo do fluxo OIDC — início do fluxo, sucesso do callback, troca de token (quais tokens retornaram), resultado da verificação de assinatura do ID token, resultado da busca de JWKS — é registrado com um ID de correlação que se reconecta à sessão AAM e ao(s) backend(s) por trás dela. A pergunta "quem entrou por qual IdP e quando" é respondida com uma única consulta.

06

Roadmap — discovery automático de provedor e telemetria de rotação de JWKS

O discovery automático de provedor OIDC via endpoint .well-known/openid-configuration e o alerta ao operador quando os endpoints descobertos ou conjuntos de chaves de assinatura mudam estão no roadmap. A telemetria de rotação de JWKS — métricas de alteração de chave de assinatura, indicações de dias-até-expiração da chave atual, runbooks de rotação automática — também está planejada.

Quais equipes usam

IdPs corporativos modernos (Entra ID, Okta, Auth0, Keycloak)

IdPs corporativos existentes que já autenticam a força de trabalho via OIDC. O AAM conecta-se como uma relying party sem pedir à equipe de IdP que altere nada. Novas aplicações entram na federação adicionando um registro ao AAM, não adicionando um novo SDK OIDC a cada base de código.

IdPs sociais de força de trabalho (Google Workspace, GitHub)

Ferramentas internas que autenticam contra o tenant Google Workspace da organização ou ferramentas de desenvolvedor que usam o GitHub como IdP. O AAM fala OIDC com o Google e OAuth 2.0 com o GitHub — a partir do mesmo motor — e mapeia cada um para o formato de sessão canônico do AAM.

SaaS multi-tenant com IdP OIDC por tenant

Aplicações SaaS onde cada cliente traz seu próprio IdP OIDC. Um único gateway AAM mantém todos os tenants à frente; o tráfego de cada tenant é roteado para o IdP daquele tenant. Adicionar um tenant não é uma implantação; é adicionar uma alteração de configuração ao repositório de registro de IdP.

MFA na borda e acesso condicional sobre um IdP OIDC

Alguns IdPs autenticam mas não aplicam step-up MFA ou acesso condicional de forma uniforme para cada aplicação. O AAM aceita a autenticação do IdP e então assenta seu próprio MFA, expressões de acesso condicional e avaliação contínua de confiança sobre isso antes de conceder acesso à aplicação.

Perguntas frequentes

Com quais IdPs o AAM se federa via OIDC e OAuth 2.0?
Qualquer IdP OIDC ou OAuth 2.0 conforme aos padrões. Na prática, isso inclui Entra ID (Azure AD), Okta, Auth0, Keycloak, Google Workspace, GitHub e qualquer IdP personalizado que ofereça endpoints padrão. Os perfis embutidos vêm com padrões sensatos para provedores comuns; o caminho de IdP personalizado, onde endpoints, scopes e mapeamentos são fornecidos manualmente, permanece disponível para qualquer provedor conforme aos padrões.
Como o AAM se defende contra replay de ID token, CSRF e ataques de mixup?
O nonce vincula o ID token à requisição de autorização que o solicitou — uma divergência é um sinal de replay dedicado com seu próprio evento de auditoria. O state vincula o callback à sessão do usuário com um TTL de 10 minutos — replay entre sessões é rejeitado. O PKCE (padrão S256) vincula a troca de código ao cliente original — um código de autorização interceptado não pode ser trocado por tokens por um atacante. Ataques de mixup são derrotados vinculando o callback a um IdP específico e validando a claim issuer de acordo.
O que acontece quando o IdP rotaciona as chaves de assinatura?
O JWKS é armazenado em cache em um repositório compartilhado com um TTL de 1 hora. Quando o callback chega, o AAM seleciona a chave de assinatura a partir do cabeçalho kid do ID token no cache. Se o kid não estiver no conjunto em cache — o que ocorre imediatamente após uma rotação de chave do IdP — o AAM dispara uma atualização instantânea a partir do JWKS URI e tenta a seleção novamente. Uma rotação rotineira de chaves não produz interrupção de login.
Qual é a diferença entre OIDC e OAuth 2.0 puro nesta página?
OIDC adiciona uma camada de identidade sobre OAuth 2.0: um ID token assinado contendo claims de identidade é retornado ao lado do access token. O AAM fala ambos. Para provedores OIDC, o ID token é verificado contra o JWKS e mesclado com a resposta userinfo; as claims assinadas têm prioridade. Para provedores OAuth 2.0 puros (sem ID token), o AAM depende apenas da resposta userinfo para a identidade e aplica as mesmas defesas de auditoria, state e PKCE em torno do fluxo.
O que acontece com a identidade depois que o AAM consome os tokens?
As claims do ID token verificado e a resposta userinfo são mescladas e mapeadas para os campos de sessão canônicos do AAM (nome de usuário, e-mail, grupos, nome de exibição, atributos personalizados). O restante do motor de acesso raciocina sobre essa sessão — gating de MFA, expressões de acesso condicional, avaliação contínua de confiança, injeção de Backend SSO em direção ao backend. A aplicação recebe a identidade via Backend SSO no formato que espera; o protocolo OIDC para na borda do AAM.

OIDC corretamente, na borda

Vamos conectar o AAM ao seu IdP OIDC — corporativo, em nuvem ou self-hosted — e assentar o restante do motor de acesso sobre o ID token verificado com MFA, acesso condicional, confiança de dispositivo e Backend SSO.