OAuth 2.0 em Profundidade: Fluxos, Tokens e Segurança
Voltar para Learn
FAACCapítulo 16

Fundamentos e Arquitetura de APIs Corporativas

OAuth 2.0 em Profundidade: Fluxos, Tokens e Segurança

Papéis, endpoints, Authorization Code com PKCE, Client Credentials, refresh tokens, introspecção, revogação e práticas modernas de proteção

Edição aprofundada - material de estudo e consulta profissional

Fluxos OAuth 2.0 protegidos por PKCE, tokens e controles modernos de segurança

Delegação 2.0: autorização sem compartilhar a senha do usuário

OAuth 2.0 delegando autoridade entre usuário, cliente, authorization server, gateway e API
Figura de abertura - delega autoridade limitada sem transformar o cliente em proprietário das credenciais do usuário.

Princípio central

O cliente recebe autoridade limitada para acessar uma ; autenticação do usuário e autorização da continuam sendo decisões distintas.

Edição aprofundada - material de estudo e consulta profissional

Apresentação do capítulo

Os capítulos anteriores separaram identidade, autenticação, autorização e credenciais estáticas. Agora o curso aprofunda o 2.0, criado para permitir que um cliente obtenha autoridade limitada para acessar um recurso protegido. A ideia central é substituir o compartilhamento direto de credenciais por artefatos temporários, com audiência, escopo, duração e contexto controlados.

2.0 não é um protocolo único e fechado. É uma família de papéis, , grants, tipos de cliente, formatos de e extensões. A segurança de uma implantação depende da composição correta desses elementos. Um flow pode ser robusto quando usa , redirect estrita e proteção de estado, mas pode ser vulnerável quando aceita redirecionamentos amplos, mistura emissores ou expõe códigos e em .

A especificação original permanece importante, porém a prática moderna é guiada também por documentos posteriores. O Best Current Practice de segurança consolida experiências operacionais, desaconselha modos inseguros e reforça , redirect exata, proteção contra mix-up, restrição de e defesa contra . Extensões como , , RAR, , , metadata de recursos e atendem cenários de maior risco e integrações corporativas.

Este capítulo percorre o ciclo completo: registro do cliente, solicitação de autorização, emissão e uso de , renovação, revogação, introspecção, delegação entre serviços e enforcement no . O objetivo é permitir que o leitor projete e diagnostique fluxos reais sem confundir autenticação do usuário, autenticação do cliente, consentimento, autorização do recurso e validação do .

Estado das especificações

2.1 continua sendo um Internet-Draft em 2026. Ele consolida práticas modernas, mas não substitui automaticamente as publicadas. Para decisões normativas, use as vigentes e o 2.0 Security Best Current Practice, verificando a versão atual do draft apenas como orientação adicional.

Objetivos de aprendizagem

  • Explicar o problema de delegação resolvido por 2.0 e seus limites.
  • Distinguir , , e .
  • Diferenciar authorization , , , revocation e metadata.
  • Classificar clientes públicos e confidenciais e escolher autenticação compatível com sua capacidade de proteger chaves.
  • Descrever com e os controles , , issuer e redirect .
  • Aplicar , Device Authorization e nos cenários adequados.
  • Distinguir grants, códigos, , e .
  • Projetar , audiences, resource indicators, consentimento e autorização detalhada.
  • Compreender opacos, , introspecção, revogação e perfis de .
  • Aplicar , , , RAR, , e conforme o risco.
  • Integrar com , Axway e Azure Management.
  • Diagnosticar invalid_request, invalid_client, invalid_grant, invalid_token e insufficient_scope.

Estrutura do capítulo

  • 16.1 O problema que 2.0 resolve
  • 16.2 Papéis e fronteiras de confiança
  • 16.3 , metadata e canais
  • 16.4 Registro, tipos de cliente e redirect
  • 16.5 Grants, fluxos e tipos de
  • 16.6 em profundidade
  • 16.7 e proteção contra interceptação
  • 16.8 , , issuer e proteção contra mix-up
  • 16.9 Autenticação de clientes confidenciais
  • 16.10 Aplicações web, SPAs, nativas e
  • 16.11
  • 16.12 Device Authorization
  • 16.13 , rotação e reutilização
  • 16.14 , , audience e resource indicators
  • 16.15 opacos, introspecção e revogação
  • 16.16 e validação
  • 16.17 Consentimento, least privilege e Rich Authorization
  • 16.18 , e
  • 16.19 Sender-constrained com e
  • 16.20 e on-behalf-of
  • 16.21 Metadata do e do recurso protegido
  • 16.22 em , Axway e Azure
  • 16.23 Ameaças e hardening
  • 16.24 orientado por evidências
  • 16.25 Estudos de caso e laboratórios
  • Resumo, checklist, exercícios, glossário e referências

16.1 O problema que 2.0 resolve

Antes de de delegação, era comum uma aplicação pedir a senha do usuário para acessar outro sistema. Essa prática entregava ao cliente poder excessivo, impedia limitar operações, dificultava revogação seletiva e expunha credenciais reutilizáveis. Se o cliente fosse comprometido, o atacante poderia agir como o usuário em qualquer interface que aceitasse a mesma senha.

substitui esse compartilhamento por uma concessão de autoridade. O cliente solicita autorização para uma finalidade; o autentica o usuário quando necessário, aplica políticas e emite um destinado ao . O cliente recebe apenas a capacidade representada pelo , não a credencial primária do usuário.

O não define sozinho como o usuário se autentica, como a modela permissões de objeto ou como o deve obrigatoriamente ser formatado. Também não transforma um em prova de login para o cliente. OpenID Connect atende a necessidade de comunicar autenticação do usuário ao cliente, enquanto a continua responsável por autorização fina e regras de negócio.

Modelo mental

responde: “como um cliente obtém e apresenta autoridade limitada para um recurso?”. Ele não responde sozinho: “quem é o usuário para a interface?”, “o usuário é dono deste objeto?” ou “esta transação é permitida pelo domínio?”.

Papéis OAuth e seus canais de comunicação e confiança
Figura 1 - Os papéis são responsabilidades lógicas; um produto pode implementar mais de um papel, mas as fronteiras devem permanecer explícitas.

16.2 Papéis e fronteiras de confiança

O é a entidade capaz de conceder acesso ao recurso. Em muitos fluxos é uma pessoa, mas também pode ser uma organização ou política administrativa. O é a aplicação que solicita acesso. Ele não é proprietário automático dos dados e não deve receber mais autoridade do que a necessária para sua função.

O autentica o quando aplicável, avalia a solicitação, registra consentimento ou política e emite . O é a que aceita e decide se a operação é permitida. Em uma plataforma corporativa, o pode atuar como parte do ao validar o e aplicar controles transversais, enquanto o conserva decisões de domínio.

Papéis lógicos não equivalem obrigatoriamente a processos separados. Um mesmo produto pode hospedar autorização e recursos, e um pode intermediar múltiplas . Mesmo assim, issuer, audience, chaves, e responsabilidades devem ser distintos para impedir que um emitido para um serviço seja aceito indevidamente por outro.

Tabela 1 - Cada papel possui controles e evidências próprias.
PapelResponsabilidade principalErro de desenho comum
Resource ownerconcede autoridade sobre recursostratar consentimento como autorização irrestrita.
Clientsolicita e usa tokensarmazenar segredo em aplicativo incapaz de protegê-lo.
Authorization serveremite tokens e publica metadataemitir audience ampla e aceitar redirect URI flexível.
Resource servervalida token e autoriza operaçãoaceitar JWT apenas porque a assinatura é válida.

16.3 , metadata e canais

O authorization recebe solicitações por meio do user agent e conduz interação com o . O é acessado diretamente pelo cliente para trocar grants por . Essa separação cria dois canais: front-channel, exposto a navegador, histórico, extensões e redirecionamentos; e back-channel, protegido por e usado para requisições diretas entre cliente e .

opcionais ampliam operação e interoperabilidade. permite que o consulte o estado de um . Revocation permite invalidar e, conforme a implementação, . recebe parâmetros de autorização antecipadamente por back-channel. Metadata descreve issuer, , métodos de autenticação, algoritmos e capacidades suportadas.

de são dados de segurança. O cliente não deve construí-las por concatenação nem aceitar metadata de origem não confiável. O issuer retornado precisa corresponder ao emissor configurado. , validação de hostname e resolução confiável continuam essenciais porque protege autoridade, não substitui a segurança do canal.

Tabela 2 - Endpoints possuem exposições e controles distintos.
EndpointCanal típicoFinalidade
Authorizationfront-channelinteração do usuário e emissão de authorization code.
Tokenback-channeltroca de grant e autenticação do cliente.
Introspectionback-channelconsulta de atividade e atributos de token.
Revocationback-channelinvalidação de token conforme política.
PARback-channelregistro protegido dos parâmetros de autorização.
Metadataleitura autenticada por origemdescoberta de endpoints e capacidades.

16.4 Registro, tipos de cliente e redirect

O registro associa client_id, redirect , tipo de aplicação, contatos, chaves, métodos de autenticação e grants permitidos. O client_id é um identificador público, não um segredo. A segurança depende do vínculo correto entre o identificador e as propriedades registradas, especialmente redirect e material criptográfico.

Clientes confidenciais conseguem manter credenciais sob controle, como aplicações web com ou serviços. Clientes públicos executam em ambientes onde o usuário ou atacante pode extrair o software e seus valores, como SPAs e aplicativos nativos. Inserir client_secret em JavaScript, pacote móvel ou aplicativo distribuído não transforma o cliente em confidencial; o segredo passa a ser copiável.

Redirect deve ser comparada por correspondência exata, salvo regras muito específicas para loopback de aplicações nativas. Wildcards, prefix matching e open redirectors permitem desviar códigos. Cada ambiente deve possuir próprias, e a aplicação precisa validar a rota de retorno antes de iniciar qualquer sessão local.

Segredo em cliente público

Um valor embutido em , aplicativo móvel ou binário distribuído deve ser considerado público. A proteção adequada vem de , redirect estrita, sistema operacional, quando aplicável e restrição dos - não da tentativa de ocultar um client_secret.

16.5 Grants, fluxos e tipos de

é a representação de uma autorização usada pelo cliente para obter . , , e device code são exemplos. “Fluxo” descreve a sequência completa de interações. Confundir com leva a e políticas imprecisas: o é curto, de uso único e destinado ao ; o é apresentado à .

O representa autoridade para um . O permite solicitar novos e deve ficar restrito ao . O pertence ao OpenID Connect e comunica ao cliente fatos sobre a autenticação; não deve ser usado como . Cada artefato possui destinatário, vida útil e proteção diferentes.

Os antigos Implicit e Password Credentials não devem ser escolhidos para novos projetos. O primeiro expõe no front-channel e perdeu sua justificativa com ; o segundo entrega credenciais do usuário ao cliente e impede muitos controles modernos. Migrações devem priorizar com ou fluxos máquina a máquina apropriados.

Tabela 3 - Artefatos não são intercambiáveis.
ArtefatoDestinatárioPropriedade operacional
Authorization codetoken endpointcurto, uso único e vinculado a cliente/redirect URI/PKCE.
Access tokenresource serverautoridade temporária, audience e escopo.
Refresh tokenauthorization servercredencial de longa duração relativa; exige proteção e rotação.
ID tokencliente OIDCasserção sobre autenticação, não credencial genérica de API.
device_codetoken endpointpolling controlado para dispositivo limitado.
Authorization Code com PKCE usando front-channel e back-channel
Figura 2 - vincula a troca do a uma prova criada pelo cliente.

16.6 em profundidade

O cliente cria uma solicitação de autorização contendo response_type=code, client_id, redirect_uri, , e parâmetros de . O navegador é redirecionado ao , onde o usuário pode ser autenticado e a política avaliada. Em caso de sucesso, o retorna um para a redirect registrada.

O cliente recebe o code e o troca no . Essa requisição direta inclui grant_type=authorization_code, code, redirect_uri e code_verifier. Clientes confidenciais também se autenticam. O servidor verifica uso único, prazo, cliente, redirect e antes de emitir .

O code não deve carregar autoridade reutilizável nem ser enviado a . Ele existe para reduzir exposição de no front-channel e permitir validações no back-channel. , ferramentas de analytics, páginas de erro e referers não devem registrar o valor. Após a troca, a aplicação deve remover parâmetros sensíveis da e estabelecer seu próprio estado de sessão de forma segura.

Solicitação de autorização - valores ilustrativos

GET /authorize?response_type=code
  &client_id=portal-pagamentos
  &redirect_uri=https%3A%2F%2Fapp.example%2Fcallback
  &scope=pagamentos.read%20pagamentos.write
  &state=valor-aleatorio
  &code_challenge=base64url-sha256-verifier
  &code_challenge_method=S256

Troca do código por

POST /token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=AUTHORIZATION_CODE
&redirect_uri=https%3A%2F%2Fapp.example%2Fcallback
&client_id=portal-pagamentos
&code_verifier=SEGREDO_ALEATORIO_DA_INSTANCIA

16.7 e proteção contra interceptação

começa com um code_verifier aleatório, de alta entropia e exclusivo por tentativa. O cliente calcula code_challenge = (SHA256(code_verifier)) e envia o challenge no authorization . Na troca do code, apresenta o verifier original. O recalcula o challenge e exige correspondência.

Se um atacante interceptar o , não poderá trocá-lo sem o verifier. O método S256 deve ser usado; plain existe por compatibilidade restrita e não oferece a mesma proteção contra observação do challenge. não substitui , redirect exata, ou autenticação do cliente confidencial. Ele resolve uma ameaça específica: interceptação e injeção de .

deve ser exigido também para clientes confidenciais quando utilizam . Além de padronizar o fluxo, protege contra ataques nos quais um código obtido em outro contexto é injetado na sessão do cliente. O verifier não deve ser reutilizado e precisa ficar associado à mesma transação que contém e redirect .

Tabela 4 - PKCE é uma prova por transação, não uma credencial permanente.
ElementoOnde apareceRequisito
code_verifiertoken requestaleatório, secreto durante a transação e não reutilizado.
code_challengeauthorization requestderivado do verifier por S256.
code_challenge_methodauthorization requestS256 para novos sistemas.
Vínculoestado do clientemesma tentativa, client_id, redirect URI e code.

16.8 , , issuer e proteção contra mix-up

vincula a resposta de autorização à sessão que iniciou a solicitação e ajuda a prevenir . Deve ser imprevisível, de uso único e associado localmente ao issuer, redirect , e intenção do usuário. Tratar apenas como de retorno assinada pode deixar a sessão sem proteção adequada contra respostas não solicitadas.

pertence ao OpenID Connect e vincula o à solicitação de autenticação. Ele não substitui na proteção do fluxo . Em clientes que usam , ambos podem ser necessários: protege o redirecionamento e é validado dentro do .

Ataques de mix-up exploram clientes que conversam com múltiplos emissores e não vinculam a resposta ao issuer correto. O cliente deve usar metadata confiável, validar o parâmetro iss quando suportado e enviar o code somente ao do emissor associado à transação. Nunca selecione o com base em dados não validados da resposta.

Estado transacional mínimo

Armazene, por tentativa: issuer esperado, client_id, redirect , , code_verifier, quando houver , solicitados e horário. Consuma o registro uma única vez e expire rapidamente.

16.9 Autenticação de clientes confidenciais

O precisa distinguir o cliente que apresenta o . client_secret_basic é simples, mas depende de segredo simétrico e transporte seguro. client_secret_post coloca o segredo no corpo e aumenta risco de ; deve ser evitado quando o método Basic é suportado. Segredos precisam de armazenamento em vault, rotação, owner e escopo por ambiente.

private_key_jwt usa uma asserção assinada pela chave privada do cliente. O valida issuer/subject, audience, expiração, identificador único e assinatura. A chave privada não é enviada, e a rotação pode ser administrada por . O mecanismo exige prevenção de de jti e validação estrita da audience do .

authentication vincula a autenticação ao certificado apresentado na conexão . Pode usar tradicional ou certificado registrado. Em ambientes com , deve ficar claro onde termina e como a identidade do certificado é preservada. Autenticação forte do cliente não elimina a necessidade de no .

Tabela 5 - O método deve corresponder à capacidade real do cliente.
MétodoMaterialVantagemCuidado
client_secret_basicsegredo simétricoamplo suporterotação, logs e compartilhamento.
private_key_jwtchave privadanão envia segredo; boa automaçãojti, audience e rotação de JWKS.
mTLS client authcertificado e chaveforte vínculo ao canalterminação TLS e ciclo de certificados.
nonesem autenticaçãoadequado a cliente públicoexigir PKCE e redirect URI segura.

16.10 Aplicações web, SPAs, nativas e

Aplicações web tradicionais mantêm código e credenciais no servidor. O navegador recebe apenas de sessão protegido, enquanto o executa , armazena e chama . Essa separação reduz exposição de ao JavaScript, mas exige proteção contra , fixation, e roubo de sessão.

SPAs são clientes públicos. com é o fluxo moderno, porém armazenados no navegador continuam expostos a e extensões. Um for pode receber o code, manter no servidor e expor ao browser somente HttpOnly, Secure e SameSite. O adiciona estado e infraestrutura, mas reduz a superfície de .

Aplicações nativas utilizam navegador externo e redirect baseadas em app links, universal links, custom schemes ou loopback. Embedded webviews prejudicam segurança e experiência de . O sistema deve impedir que outro aplicativo capture a redirect e sempre combinar o mecanismo de retorno com .

Tabela 6 - A arquitetura altera onde o token fica exposto.
TipoClassificaçãoArmazenamento preferidoFluxo
Web com backendconfidencialtokens no servidor; cookie de sessão no browserAuthorization Code + PKCE.
SPA purapúblicomemória quando possível; minimizar persistênciaAuthorization Code + PKCE.
SPA com BFFBFF confidencialtokens no BFF; cookie protegidoAuthorization Code + PKCE.
Aplicativo nativopúblicoarmazenamento seguro do sistemaAuthorization Code + PKCE e browser externo.

16.11

é usado quando o cliente age em seu próprio nome, sem humano na transação. O cliente se autentica no e recebe associado à identidade da aplicação. É apropriado para serviços, jobs e automações que possuem permissões próprias.

O não deve ser usado para simular usuários nem transportar user_id arbitrário. A autorização deve se basear no principal da aplicação, seu tenant, owner e permissões de aplicação. Se um serviço precisa preservar contexto do usuário ao chamar outro, on-behalf-of ou é mais adequado.

Como o pode abrir acesso amplo, credenciais estáticas devem ser substituídas por private_key_jwt, , managed identity ou workload federation quando possível. de aplicação precisam ser separados de delegados para impedir que um app-only seja confundido com autoridade do usuário.

- exemplo conceitual

POST /token
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&scope=liquidacoes.process

Pergunta de revisão

Se a operação precisa saber “qual usuário autorizou?”, isoladamente não fornece essa resposta. O principal é a aplicação.

16.12 Device Authorization

O Device Authorization atende dispositivos com entrada limitada ou sem navegador conveniente. O cliente solicita e user_code, apresenta ao usuário uma verification_uri e inicia no . O usuário conclui autenticação e autorização em outro dispositivo capaz de navegar.

O cliente deve respeitar interval, expires_in e erros como authorization_pending e slow_down. agressivo cria carga e pode provocar bloqueio. O user_code precisa ser curto o suficiente para digitação, mas protegido por , expiração e vínculo ao de alta entropia.

O fluxo não deve ser usado como atalho para aplicações que já possuem navegador adequado. A interface deve mostrar claramente qual dispositivo e operação estão sendo autorizados, reduzindo ataques de phishing em que um código enviado por terceiro é inserido pela vítima.

Tabela 7 - O fluxo separa o dispositivo solicitante do canal de autenticação.
EtapaArtefatoControle
Iníciodevice_code + user_codedevice_code secreto; user_code curto e expirável.
Interaçãoverification_uriexibir contexto do cliente e evitar phishing.
Pollingdevice_coderespeitar interval e slow_down.
Conclusãoaccess/refresh tokenvincular ao cliente e política aprovada.
Ciclo de vida de grants, access tokens e refresh tokens
Figura 3 - possuem ciclo de vida e decisões de revogação diferentes.

16.13 , rotação e reutilização

é uma credencial de alto valor porque permite obter novos sem repetir toda a interação. Deve ser enviado apenas ao , protegido em armazenamento adequado e limitado ao cliente e à autorização original. curtos reduzem exposição; mantêm continuidade controlada.

Para clientes públicos, o BCP recomenda sender-constrained ou com rotação. Na rotação, cada uso produz um novo e invalida o anterior. Se um antigo reaparece, o servidor detecta possível roubo e revoga a família ou a autorização correspondente. A implementação precisa lidar com concorrência e respostas perdidas sem criar falsos positivos.

Expiração absoluta, expiração por inatividade, revogação por logout, mudança de senha, retirada de consentimento e risco devem ser definidos. “ nunca expira” transfere todo o controle para uma revogação perfeita, algo difícil em sistemas distribuídos. O cliente deve tratar invalid_grant como necessidade de nova autorização, não como motivo para repetir indefinidamente.

Tabela 8 - Refresh token precisa de política própria.
ControleObjetivoDecisão operacional
Rotaçãodetectar reutilizaçãorevogar família e registrar incidente quando token antigo reaparece.
Sender constraintvincular a uma chavevalidar mTLS/DPoP em cada renovação.
Expiração absolutalimitar duração totalexigir nova autorização após período definido.
Inatividadeencerrar autorizações abandonadasrenovar apenas enquanto houver uso legítimo.
Revogaçãoresponder a risco e desligamentopropagar rapidamente e auditar motivo.

16.14 , , audience e resource indicators

deve ser aceito somente pelo para o qual foi emitido. Audience ampla transforma um em passe reutilizável entre . Resource Indicators permitem ao cliente declarar o recurso pretendido durante autorização ou , ajudando o a emitir específicos.

representa autoridade solicitada e concedida, mas sua semântica deve ser documentada. como read e write são simples, porém podem ficar ambíguos em plataformas grandes. Nomes de domínio, operação e recurso ajudam: pagamentos.read, pagamentos.create e conciliacao.execute. não substitui autorização de objeto, tenant ou estado do domínio.

O valida audience, escopo e contexto da requisição. Uma não deve aceitar um porque contém “admin” sem verificar issuer, tipo e origem da . de autorização precisam ter governança: quem as emite, quando mudam, como são revogadas e qual serviço possui autoridade para interpretá-las.

Resource Indicator - exemplo conceitual

GET /authorize?response_type=code
  &client_id=app
  &resource=https%3A%2F%2Fapi.pagamentos.example
  &scope=pagamentos.read
Tabela 9 - Validação técnica e autorização de negócio são complementares.
ElementoPergunta de validação
audienceeste token foi emitido para esta API ou gateway?
scopea autoridade concedida inclui a operação?
subject / clientquem é o principal e qual aplicação atua?
tenanto principal e o recurso pertencem ao contexto permitido?
token typeo artefato é um access token esperado, não ID token ou outro JWT?

16.15 opacos, introspecção e revogação

opaco não revela estrutura ao cliente ou . A consulta o por introspecção ou usa estado local distribuído. Essa abordagem facilita revogação imediata e minimiza exposição de , mas cria dependência de disponibilidade, latência, autenticação da e política de .

retorna active e atributos autorizados para o solicitante. active=false deve ser resposta normal para inválido, expirado, revogado ou desconhecido, sem revelar detalhes. O precisa autenticar resource servers e limitar quais dados cada um pode consultar. reduz carga, mas aumenta a janela entre revogação e enforcement.

Revocation permite ao cliente solicitar invalidação. A resposta bem-sucedida não deve revelar se o existia. Revogar normalmente encerra a capacidade de renovação; já emitidos podem continuar até expirar se forem auto-contidos. Arquiteturas de alto risco combinam curto, introspecção, eventos de revogação ou denylist.

Introspecção - exemplo simplificado

POST /introspect
Authorization: Basic <credencial-do-resource-server>
Content-Type: application/x-www-form-urlencoded
token=TOKEN_OPACO
HTTP/1.1 200 OK
{
  "active": true,
  "client_id": "portal",
  "scope": "pagamentos.read",
  "exp": 1770000000
}

16.16 e validação

permite ao validar localmente assinatura e , reduzindo chamadas ao . O perfil de padroniza e tipos úteis, mas a ainda precisa conhecer issuer, audience, algoritmos e chaves confiáveis. Decodificar não é validar.

A validação deve fixar algoritmos permitidos, localizar a chave pelo kid em confiável, verificar assinatura, issuer, audience, expiração, not-before quando presente e tipo esperado. O deve rejeitar emitidos para outro uso, mesmo que a mesma chave assine . typ e regras de profile ajudam a impedir confusão entre tipos de .

Rotação de chaves exige e atualização controlada. Quando kid desconhecido aparece, o pode atualizar , mas não deve permitir que o indique uma arbitrária de chave. Falha temporária de metadata não deveria invalidar imediatamente todas as chaves ainda confiáveis; ao mesmo tempo, excessivos atrasam remoção de chave comprometida.

Tabela 10 - Assinatura válida é apenas uma das verificações.
ValidaçãoFalha que evita
assinatura e algoritmo fixadotoken alterado ou algorithm confusion.
issuer exatotoken de domínio não confiável.
audiencereutilização em outra API.
exp / nbf / relógiouso fora da janela permitida.
typ / profileconfusão entre access token, ID token e outros JWTs.
scopes e claimsoperação além da autoridade concedida.

Conteúdo não criptografado

Um assinado normalmente protege integridade, não confidencialidade. Evite PII e dados desnecessários. O passa por clientes, , , ferramentas e ; trate-o como credencial sensível.

16.17 Consentimento, least privilege e Rich Authorization

Consentimento é uma interface de decisão, não um substituto para política. Em ambientes corporativos, algumas permissões são aprovadas por administradores ou contratos, enquanto outras dependem do usuário. A tela deve identificar cliente, dados, ações, duração e consequências, evitando técnicos incompreensíveis.

Least privilege começa na definição dos e continua no . Solicitar todos os “para evitar novo consentimento” aumenta impacto de vazamento. Incremental authorization permite pedir autoridade adicional apenas quando a funcionalidade é usada. O pode conceder subconjunto e o cliente precisa verificar a resposta.

Rich Authorization representa detalhes estruturados, como valor, moeda, conta e tipo de transação. Isso permite autorizações mais precisas do que strings de , especialmente em pagamentos e dados financeiros. O objeto de autorização deve ser validado, assinado ou protegido conforme o perfil adotado e não deve ser aceito como dado livre enviado pelo cliente à .

Rich Authorization - exemplo didático

{
  "authorization_details": [{
    "type": "payment_initiation",
    "instructedAmount": {"currency": "BRL", "amount": "150.00"},
    "creditorAccount": {"iban": "EXEMPLO"}
  }]
}

16.18 , e

Pushed Authorization permite ao cliente enviar parâmetros ao por back-channel e receber request_uri de curta duração. O navegador transporta apenas a referência. Isso reduz manipulação, exposição e tamanho da , além de permitir autenticação do cliente antes da interação do usuário.

-Secured Authorization representa a solicitação em um assinado e, opcionalmente, criptografado. O valida integridade e origem dos parâmetros. e podem ser combinados: o cliente envia um object assinado ao e usa o request_uri no authorization .

protege a resposta de autorização em um assinado ou criptografado. Em vez de confiar somente em parâmetros soltos no redirect, o cliente valida issuer, audience, assinatura e tempo. Esses mecanismos aumentam complexidade e gestão de chaves, por isso são mais comuns em perfis financeiros, ecossistemas regulados e integrações de alto risco.

Tabela 11 - Mecanismos protegem etapas diferentes do front-channel.
MecanismoProtegeBenefício
PARenvio dos parâmetrosback-channel autenticado e URL reduzida.
JARconteúdo da solicitaçãointegridade, origem e possível confidencialidade.
JARMresposta de autorizaçãoassinatura, issuer e audience verificáveis.
Comparação entre bearer token e sender-constrained token
Figura 4 - Proof-of-possession reduz a utilidade de um copiado.

16.19 Sender-constrained com e

funciona como dinheiro ao portador: quem obtém o valor pode apresentá-lo. vincula o a uma chave do cliente. O exige, além do , uma prova de posse correspondente. O objetivo é reduzir após vazamento em , , memória ou canais laterais.

Com , o associa o ao certificado do cliente e o verifica o certificado apresentado na conexão. O cnf pode carregar thumbprint. A arquitetura precisa garantir que a observe a identidade correta mesmo quando há ou terminando conexões.

usa um de prova assinado pelo cliente em cada requisição, contendo método , , horário, identificador único e vínculo ao . A valida assinatura, htm, htu, iat, jti, chave e ath. é proteção de camada de aplicação e não substitui . do servidor e de jti podem fortalecer defense conforme o risco.

Tabela 12 - A escolha depende de cliente, infraestrutura e risco.
MecanismoVínculoPonto forteDesafio
mTLScertificado na conexãoforte para clientes e serviços controladosproxies, PKI e terminação TLS.
DPoPchave e prova por requisiçãoaplicável sem certificado clientevalidação de URI, relógio, jti e chave.
Bearernenhumsimplicidade e compatibilidadereplay após cópia do token.

16.20 e on-behalf-of

Em arquiteturas de serviços, o primeiro pode precisar chamar outro mantendo parte da autoridade original. Encaminhar o mesmo para todos os serviços amplia audiences e expõe a credencial. permite trocar um subject por outro apropriado ao próximo recurso.

O novo pode representar o usuário, o serviço ator ou ambos. de actor ajudam a registrar a cadeia. A política deve limitar quais clientes podem trocar , quais audiences podem ser solicitadas e quais podem ser preservados. A troca não deve elevar privilégio além do de entrada e da autoridade do ator.

On-behalf-of é uma implementação de delegação em que um serviço atua em nome do usuário. precisam preservar usuário, cliente inicial, serviço intermediário e autorização efetiva. Se uma chamada passa por vários domínios de confiança, cada emissão deve ser tratada como nova decisão, não como simples cópia de .

Tabela 13 - Preserve contexto sem reutilizar autoridade indiscriminadamente.
EstratégiaVantagemRisco
Encaminhar token originalsimplesaudience ampla, vazamento e acoplamento.
Token Exchangetoken específico por saltocomplexidade de política e correlação.
Credencial do serviço apenassepara backendperde contexto do usuário quando ele é necessário.

16.21 Metadata do e do recurso protegido

Metadata publica issuer, , métodos de autenticação, grants, e algoritmos. Clientes devem obter o documento de origem configurada e validar coerência entre issuer e . Metadata simplifica rotação e interoperabilidade, mas não deve transformar descoberta em confiança automática.

Protected Resource Metadata permite que uma publique identificador do recurso, authorization servers relacionados, e métodos de apresentação suportados. Isso ajuda clientes e authorization servers a entender como obter para um recurso e melhora desafios WWW-Authenticate.

Metadata deve ser versionada e monitorada como parte da plataforma. Mudanças em , algoritmo ou issuer podem interromper todos os clientes. precisa respeitar disponibilidade sem congelar configuração indefinidamente. Ambientes internos, externos e de homologação devem ter documentos separados para impedir mistura de confiança.

Metadata - trecho ilustrativo

{
  "issuer": "https://id.example",
  "authorization_endpoint": "https://id.example/authorize",
  "token_endpoint": "https://id.example/token",
  "jwks_uri": "https://id.example/jwks.json",
  "code_challenge_methods_supported": ["S256"]
}
OAuth em arquitetura corporativa com API Gateway e backend
Figura 5 - O atua como enforcement transversal; a autorização de domínio permanece no .

16.22 em , Axway e Azure

podem validar , consultar introspecção, exigir , aplicar quota por client_id e propagar contexto confiável. Antes de inserir internos, o deve remover versões fornecidas pelo cliente. O deve aceitar esses apenas de uma conexão autenticada proveniente do .

No Azure Management, validate- e validate-azure-ad- podem validar antes do . Policies podem exigir issuer, audience e , enquanto authentication-managed-identity permite ao obter para um compatível. A configuração do developer portal para facilita testes, mas não substitui enforcement na policy.

No Axway , filtros e serviços podem implementar , validação de , autenticação de clientes e políticas de . A topologia precisa registrar qual componente emite, qual valida, onde chaves são armazenadas e como revogação e rotação são tratadas. Como versões e licenças mudam, valide a documentação do produto instalado.

Azure Management - policy conceitual

<validate-jwt header-name="Authorization"
              require-expiration-time="true"
              require-signed-tokens="true">
  <openid-config url="https://id.example/.well-known/openid-configuration" />
  <audiences><audience>api://pagamentos</audience></audiences>
  <required-claims>
    <claim name="scp" match="any"><value>pagamentos.read</value></claim>
  </required-claims>
</validate-jwt>

Divisão de responsabilidade

O valida issuer, audience, assinatura, tempo, e requisitos transversais. O continua verificando tenant, ownership, estado da transação, limites de negócio e autorização de objeto.

16.23 Ameaças e hardening

Intercepção de é reduzida por . e login exigem e vínculo transacional. Mix-up exige associação ao issuer. Redirect manipulation exige comparação exata. leakage exige , higiene de , corretos, armazenamento seguro e redução de . pode exigir sender constraint.

Open redirectors no cliente ou ampliam desvio de códigos. Referer, histórico e analytics podem capturar parâmetros do front-channel. em vazam com facilidade e não devem ser usados como forma normal de apresentação. devem seguir Authorization e respostas precisam de -Control adequado.

Authorization servers devem proteger contra brute force, credential stuffing, flooding e abuso de user_code. Clientes precisam validar todas as respostas e não exibir detalhes internos. Resource servers devem limitar algoritmos, validar audience e não confiar em sem namespace e governança. Toda implantação necessita inventário de clientes, owners, grants, redirect e chaves.

Tabela 14 - Controles devem produzir evidências observáveis.
AmeaçaControle principalEvidência
Code interceptionPKCE S256 e code de uso únicofalhas de verifier e reutilização.
CSRF / login injectionstate vinculado à sessãostate ausente, divergente ou consumido.
AS mix-upissuer e metadata vinculadosissuer da resposta e token endpoint usado.
Token replayTTL, mTLS/DPoP e detecçãojti, thumbprint e origem.
Refresh token theftrotação e reuse detectionfamília revogada e evento de risco.
Redirect abusecomparação exata e sem open redirectURI registrada e URI recebida.

Práticas desaconselhadas

Não use Implicit ou Password Credentials em novos projetos. Não armazene client_secret em cliente público. Não aceite redirect por prefixo. Não trate como . Não aceite somente porque “decodificou sem erro”.

16.24 orientado por evidências

O diagnóstico começa identificando o e a etapa. Erro no authorization envolve parâmetros, sessão, política e redirect . Erro no envolve authentication, code, verifier, e relógio. Erro na envolve apresentação, validação e autorização. Misturar essas etapas transforma invalid_grant em “ inválido” ou 403 em “falha do login”.

Colete correlation ID, issuer esperado, client_id, grant_type, redirect normalizada, , audience, kid, horário e status sem registrar ou códigos. Compare o relógio dos componentes. Confirme metadata e acessadas pelo runtime, não apenas pelo notebook do operador. Em ambientes com , registre hostname, e destino real.

Para intermitência, investigue rotação de chaves, múltiplos nós com divergente, reutilização concorrente de ou , balanceamento sem afinidade de estado e . Reproduza com um único fluxo controlado e sintéticos. Um pode funcionar em um e falhar em outro por configuração ou diferentes.

Tabela 15 - Classifique a etapa antes de alterar policies.
ErroHipóteses iniciaisEvidência
invalid_requestparâmetro ausente, duplicado ou incompatívelrequisição normalizada e metadata.
invalid_clientmétodo, segredo, certificado ou assertionclient_id, auth method, jti e certificate thumbprint.
invalid_grantcode expirado/usado, PKCE, redirect URI ou refresh revogadoestado da transação e histórico de uso.
invalid_tokenassinatura, issuer, audience, tempo ou revogaçãoreason code interno e kid.
insufficient_scopetoken válido sem autoridade necessáriascope concedido e política da operação.
401/403 divergentecamadas diferentes responderamVia, Server, request-id e logs correlacionados.

Erro externo estável; causa detalhada permanece no seguro

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="pagamentos",
  error="invalid_token"
Content-Type: application/problem+json
{
  "type": "https://errors.example/oauth/invalid-token",
  "status": 401,
  "correlationId": "corr-8f12"
}

16.25 Estudos de caso

Caso 1 - com segredo embutido

Uma envia client_secret no . O valor é visível no bundle e pode ser copiado por qualquer usuário. A correção é registrar o cliente como público, usar com e redirect exata. Se o risco de no browser for alto, adotar e protegido.

A investigação também verifica , armazenamento de , , logout e renovação. Apenas remover o segredo não resolve exposição de ou persistido em localStorage.

Caso 2 - aceito por errada

Duas confiam no mesmo issuer e chave, mas uma delas não valida audience. Um emitido para relatórios é aceito em pagamentos. A correção é exigir audience específica e separar . Em sistemas críticos, resource indicators e por recurso reduzem a possibilidade de reutilização cruzada.

Os testes de contrato de segurança devem enviar válidos para audiences vizinhas e esperar rejeição. Essa verificação negativa precisa existir em e quando ambos validam .

Caso 3 - reutilizado após

O cliente usa um , recebe e repete a chamada. O primeiro processamento havia emitido novo ; a repetição parece roubo e a família é revogada. A solução combina idempotência operacional, janela de tolerância controlada ou lógica de cliente que serializa renovação e trata respostas perdidas.

Uma tolerância ampla enfraquece detecção de reutilização. A decisão deve considerar risco, rede e capacidade de correlacionar tentativas. precisam registrar família, predecessor, cliente e resultado sem armazenar o valor bruto.

Caso 4 - valida, rejeita

O aceita o para sua própria audience e o encaminha ao , que espera destinado a ele. A arquitetura precisa escolher: confia no contexto propagado pelo em canal autenticado, ou obtém um novo para o usando managed identity, ou .

Encaminhar o original só é correto quando o é o daquela audience. A decisão deve estar documentada no contrato de segurança e testada com múltiplas .

Laboratórios de observação

Laboratório 1 - com

  • Use um de laboratório ou simulador autorizado.
  • Gere verifier aleatório e challenge S256.
  • Execute o fluxo correto e registre apenas valores sintéticos.
  • Repita com verifier errado, divergente, code reutilizado e redirect alterada.
  • Classifique cada erro pela etapa e pelo .

Laboratório 2 - validação de audience e

  • Configure duas com audiences diferentes.
  • Emita para a A e tente usá-lo na B.
  • Teste ausente, expirado e issuer alternativo.
  • Compare resposta externa e reason code interno.

Laboratório 3 - introspecção e

  • Use opacos de laboratório e de introspecção.
  • Meça latência sem e com curto.
  • Revogue o e observe a janela até a rejeição.
  • Documente a decisão entre disponibilidade e rapidez de revogação.

Laboratório 4 - rotação de

  • Obtenha um sintético.
  • Renove e confirme emissão de sucessor.
  • Reutilize o predecessor e observe a política da família.
  • Simule duas renovações concorrentes e analise o resultado.

Laboratório 5 - policy no

  • Configure issuer, audience e em de laboratório.
  • Teste kid desconhecido e atualização de .
  • Remova de identidade enviados pelo cliente.
  • Propague somente validadas e compare com autorização do .

Resumo do capítulo

2.0 é um de delegação. , , e possuem responsabilidades diferentes. Authorization e usam canais distintos, e cada artefato - code, , e - possui destinatário e ciclo de vida próprio.

com é a base moderna para aplicações com usuário. protege contra interceptação, vincula a transação, pertence ao e issuer protege clientes multiemissor. Clientes públicos não possuem segredo confiável; clientes confidenciais podem usar secret, private_key_jwt ou .

representa a aplicação, Device Authorization atende entrada limitada e exigem rotação ou sender constraint. precisam de audience e escopo mínimos. opacos favorecem controle central; favorecem validação local, mas exigem verificação completa e gestão de chaves.

, , e RAR fortalecem solicitações e respostas; e reduzem ; controla delegação entre serviços. aplicam validação transversal, enquanto preservam autorização de domínio. Segurança depende de inventário, least privilege, redirect exata, higiene de , observabilidade e testes negativos.

Próximo passo do curso

O Capítulo 17 aprofundará OpenID Connect: , UserInfo, , acr, amr, autenticação federada, sessões, logout e integração segura de aplicações com provedores de identidade.

Checklist de 2.0

  • Cada cliente possui owner, tipo, redirect e grants explicitamente registrados.
  • usa S256, inclusive para clientes confidenciais.
  • é aleatório, de uso único e vinculado a issuer, redirect e verifier.
  • Clientes públicos não dependem de client_secret.
  • Redirect usam correspondência exata e não contêm open redirectors.
  • Implicit e password grants não são usados em novos projetos.
  • possuem audience e mínimos.
  • não é aceito como .
  • têm rotação, sender constraint ou política equivalente.
  • validam assinatura, algoritmo, issuer, audience, tipo e tempo.
  • é autenticada e possui compatível com revogação.
  • não aparecem em , , analytics ou mensagens de erro.
  • ou é considerado para risco elevado de .
  • e têm divisão explícita de autorização.
  • Rotação de , certificados e é testada.
  • Erros são correlacionáveis sem revelar detalhes sensíveis.
  • Clientes, grants, consentimentos e possuem processo de desligamento.

Exercícios

  • Explique por que 2.0 não é, sozinho, um protocolo de autenticação do usuário.
  • Diferencie , , e .
  • Descreva as verificações do com .
  • Explique por que e não são substitutos um do outro.
  • Classifique uma e justifique por que seu client_secret não é confiável.
  • Compare client_secret_basic, private_key_jwt e .
  • Modele para um job sem usuário.
  • Explique reuse detection em rotation.
  • Compare opaco com em revogação e disponibilidade.
  • Liste validações obrigatórias de um .
  • Explique audience e resource indicators em plataforma com múltiplas .
  • Compare , e .
  • Diferencie -bound e -bound .
  • Proponha para três serviços preservando o usuário.
  • Monte roteiro de para invalid_grant intermitente.

Glossário

Tabela 16 - Vocabulário essencial do capítulo.
TermoDefinição
Access tokenCredencial apresentada ao resource server para exercer autoridade.
Authorization codeGrant curto e de uso único trocado no token endpoint.
Authorization serverComponente que avalia autorização e emite tokens.
Bearer tokenToken utilizável por qualquer portador do valor.
ClientAplicação que solicita e usa autoridade.
Client CredentialsGrant em que a aplicação age em seu próprio nome.
Confidential clientCliente capaz de proteger credenciais de autenticação.
device_codeArtefato usado no polling do Device Authorization Grant.
DPoPProva por requisição que vincula token a uma chave.
GrantRepresentação de autorização usada para obter token.
IntrospectionConsulta autenticada sobre atividade e atributos de token.
JARSolicitação de autorização protegida em JWT.
JARMResposta de autorização protegida em JWT.
JWT access tokenAccess token estruturado e assinado conforme perfil.
PAREnvio antecipado de parâmetros por back-channel.
PKCEProva que vincula a troca do code à instância do cliente.
Public clientCliente incapaz de manter segredo de forma confiável.
Refresh tokenCredencial usada para obter novos access tokens.
Resource ownerEntidade capaz de conceder acesso ao recurso.
Resource serverAPI que aceita access tokens e protege recursos.
ScopeRepresentação textual de autoridade solicitada ou concedida.
Sender-constrained tokenToken vinculado à prova de uma chave do cliente.
StateValor que vincula solicitação e resposta e auxilia contra CSRF.
Token ExchangeGrant para trocar um token por outro adequado a novo contexto.

Anexo A - Matriz de escolha de fluxo

Tabela 17 - A escolha final depende de plataforma, risco e capacidade do cliente.
CenárioFluxo inicialControles essenciais
Aplicação web com usuárioAuthorization Code + PKCEcliente confidencial, state, cookie protegido e redirect URI exata.
SPA puraAuthorization Code + PKCEcliente público, XSS hardening, token curto e sem secret.
SPA de maior riscoBFF + Authorization Code + PKCEtokens no servidor, CSRF e cookie HttpOnly/SameSite.
Aplicativo nativoAuthorization Code + PKCEbrowser externo, app/universal link e armazenamento do sistema.
Serviço para serviçoClient Credentialsprivate_key_jwt, mTLS ou workload identity; audience mínima.
Dispositivo limitadoDevice Authorization Grantuser_code expirável, polling controlado e anti-phishing.
Cadeia de serviçosToken Exchange / on-behalf-ofaudience por salto, actor e correlação.
Ecossistema reguladoCode + PKCE + PAR/JAR/JARMRAR, sender constraint, assinatura e auditoria reforçada.

Referências técnicas

  • . 6749 - The 2.0 Authorization . 2012.
  • . 6750 - 2.0 Usage. 2012.
  • . 7009 - 2.0 Revocation. 2013.
  • . 7519 - Web ( ). 2015.
  • . 7636 - Proof Key for Code Exchange by Public Clients. 2015.
  • . 7662 - 2.0 . 2015.
  • . 8252 - 2.0 for Native Apps. 2017.
  • . 8414 - 2.0 Metadata. 2018.
  • . 8628 - 2.0 Device Authorization . 2019.
  • . 8693 - 2.0 . 2020.
  • . 8705 - 2.0 Mutual- Authentication and Certificate-Bound . 2020.
  • . 8725 - Web Best Current Practices. 2020.
  • . 9101 - -Secured Authorization . 2021.
  • . 9126 - Pushed Authorization . 2021.
  • . 9068 - Profile for 2.0 . 2021.
  • . 9207 - 2.0 Issuer Identification. 2022.
  • . 9396 - 2.0 Rich Authorization . 2023.
  • . 9449 - 2.0 Demonstrating Proof of Possession. 2023.
  • . 9700 - Best Current Practice for 2.0 Security. 2025.
  • . 9701 - for . 2025.
  • . 9728 - 2.0 Protected Resource Metadata. 2025.
  • Working Group. The 2.1 Authorization - Internet-Draft, versão consultada em 2026.
  • Microsoft Learn. Azure Management authentication, validate- , validate-azure-ad- e managed identity policies.
  • Axway Documentation. 2.0 services, authentication e validation no .
  • OpenID Foundation. Financial-grade Security Profile e OpenID Connect specifications, quando aplicáveis ao ecossistema.

Nota de atualização

evolui por , Best Current Practices, perfis e drafts. Antes de implantar um fluxo ou policy, valide a especificação atual, a documentação da versão do produto e o comportamento em ambiente autorizado. Trate Internet-Drafts como trabalho em progresso, não como substitutos automáticos de .