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

Apresentação do capítulo

Os capítulos anteriores separaram identidade, autenticação, autorização e credenciais estáticas. Agora o curso aprofunda o , 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.

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, , , 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 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 e seus limites.
  • Distinguir , , e .
  • Diferenciar authorization , , , revocation e .
  • 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 .
  • Diagnosticar invalid_request, invalid_client, invalid_grant, invalid_token e insufficient_scope.

Estrutura do capítulo

  • 16.1 O problema que resolve
  • 16.2 Papéis e fronteiras de confiança
  • 16.3 , 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 do e do recurso protegido
  • 16.22 em , Axway e
  • 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 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. 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
concede autoridade sobre recursostratar consentimento como autorização irrestrita.
solicita e usa armazenar segredo em aplicativo incapaz de protegê-lo.
emite e publica emitir audience ampla e aceitar redirect flexível.
valida e autoriza operaçãoaceitar apenas porque a assinatura é válida.

16.3 , 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. 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 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 - possuem exposições e controles distintos.
Canal típicoFinalidade
Authorizationfront-channelinteração do usuário e emissão de .
back-channeltroca de e autenticação do cliente.
back-channelconsulta de atividade e atributos de .
Revocationback-channelinvalidação de conforme política.
back-channelregistro protegido dos parâmetros de autorização.
leitura autenticada por origemdescoberta de 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 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
curto, uso único e vinculado a cliente/redirect /.
autoridade temporária, audience e escopo.
credencial de longa duração relativa; exige proteção e rotação.
cliente asserção sobre autenticação, não credencial genérica de .
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 - é uma prova por transação, não uma credencial permanente.
ElementoOnde apareceRequisito
code_verifier aleatório, secreto durante a transação e não reutilizado.
code_challengeauthorization derivado do verifier por S256.
code_challenge_methodauthorization S256 para novos sistemas.
Vínculoestado do clientemesma tentativa, client_id, redirect 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 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 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, e compartilhamento.
private_key_jwtchave privadanão envia segredo; boa automaçãojti, audience e rotação de .
authcertificado e chaveforte vínculo ao canalterminação e ciclo de certificados.
nonesem autenticaçãoadequado a cliente públicoexigir e redirect 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 fica exposto.
TipoClassificação preferidoFluxo
Web com confidencial no servidor; de sessão no browser + .
purapúblicomemória quando possível; minimizar persistência + .
com confidencial no ; protegido + .
Aplicativo nativopúblicoarmazenamento seguro do sistema + 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, , 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 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ício + user_code secreto; user_code curto e expirável.
Interaçãoverification_uriexibir contexto do cliente e evitar .
respeitar interval e slow_down.
Conclusãoaccess/vincular 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 - precisa de política própria.
ControleObjetivoDecisão operacional
Rotaçãodetectar reutilizaçãorevogar família e registrar incidente quando antigo reaparece.
Sender constraintvincular a uma chavevalidar / 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 foi emitido para esta ou ?
a autoridade concedida inclui a operação?
subject / quem é o principal e qual aplicação atua?
tenanto principal e o recurso pertencem ao contexto permitido?
typeo artefato é um esperado, não ou outro ?

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 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 fixado alterado ou algorithm confusion.
issuer exato de domínio não confiável.
audiencereutilização em outra .
exp / nbf / relógiouso fora da janela permitida.
typ / profileconfusão entre , e outros .
e operaçã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
envio dos parâmetrosback-channel autenticado e reduzida.
conteúdo da solicitaçãointegridade, origem e possível confidencialidade.
resposta 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
certificado na conexãoforte para clientes e serviços controlados, e terminação .
chave e prova por requisiçãoaplicável sem certificado clientevalidação de , relógio, jti e chave.
nenhumsimplicidade e compatibilidade após cópia do .

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 originalsimplesaudience ampla, vazamento e acoplamento.
específico por saltocomplexidade de política e correlação.
Credencial do serviço apenassepara perde contexto do usuário quando ele é necessário.

16.21 do e do recurso protegido

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 . simplifica rotação e interoperabilidade, mas não deve transformar descoberta em confiança automática.

Protected Resource 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.

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.

- 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

podem validar , consultar introspecção, exigir , aplicar 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 , validate- e validate--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.

- 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 , , 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 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 interception S256 e code de uso únicofalhas de verifier e reutilização.
/ login injection vinculado à sessão ausente, divergente ou consumido.
AS mix-upissuer e vinculadosissuer da resposta e usado.
, / e detecçãojti, thumbprint e origem.
theftrotação e reuse detectionfamília revogada e evento de risco.
Redirect abusecomparação exata e sem open redirect registrada e 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 e acessadas pelo runtime, não apenas pelo 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 .
invalid_clientmétodo, segredo, certificado ou assertionclient_id, auth method, jti e certificate thumbprint.
invalid_grantcode expirado/usado, , redirect ou refresh revogadoestado da transação e histórico de uso.
invalid_tokenassinatura, issuer, audience, tempo ou revogaçãoreason code interno e kid.
insufficient_scope válido sem autoridade necessária concedido e política da operação.
401/403 divergentecamadas diferentes responderamVia, Server, -id e 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 , 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

é 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á : , UserInfo, , acr, amr, autenticação federada, sessões, logout e integração segura de aplicações com provedores de identidade.

Checklist de

  • 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 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
Credencial apresentada ao para exercer autoridade.
curto e de uso único trocado no .
Componente que avalia autorização e emite .
utilizável por qualquer portador do valor.
Aplicação que solicita e usa autoridade.
em que a aplicação age em seu próprio nome.
Cliente capaz de proteger credenciais de autenticação.
Artefato usado no do Device Authorization .
Prova por requisição que vincula a uma chave.
Representação de autorização usada para obter .
Consulta autenticada sobre atividade e atributos de .
Solicitação de autorização protegida em .
Resposta de autorização protegida em .
estruturado e assinado conforme perfil.
Envio antecipado de parâmetros por back-channel.
Prova que vincula a troca do code à instância do cliente.
Cliente incapaz de manter segredo de forma confiável.
Credencial usada para obter novos .
Entidade capaz de conceder acesso ao recurso.
que aceita e protege recursos.
Representação textual de autoridade solicitada ou concedida.
vinculado à prova de uma chave do cliente.
Valor que vincula solicitação e resposta e auxilia contra .
para trocar um 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ário + cliente confidencial, , protegido e redirect exata.
pura + cliente público, hardening, curto e sem secret.
de maior risco + + no servidor, e HttpOnly/SameSite.
Aplicativo nativo + browser externo, app/universal link e armazenamento do sistema.
Serviço para serviçoprivate_key_jwt, ou workload identity; audience mínima.
Dispositivo limitadoDevice Authorization user_code expirável, controlado e .
Cadeia de serviços / on-behalf-ofaudience por salto, actor e correlação.
Ecossistema reguladoCode + + //RAR, sender constraint, assinatura e auditoria reforçada.

Referências técnicas

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