JWT, JWS, JWE e JOSE em Profundidade
Voltar para Learn
FAACCapítulo 18

Fundamentos e Arquitetura de APIs Corporativas

JWT, JWS, JWE e JOSE em Profundidade

Da estrutura de claims à assinatura, criptografia, distribuição de chaves, rotação e validação segura em API Gateways

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

Token em camadas protegido por assinatura, criptografia e governança de chaves na arquitetura de APIs

Criptografia, contexto e governança para seguros

Ciclo criptográfico de um token entre emissor, JWS ou JWT, API Gateway e backend
Figura de abertura - seguros dependem de criptografia, contexto, destinatário e governança de chaves.

Princípio central

Assinatura protege integridade e origem; criptografia protege leitura. Nenhuma delas substitui validação de issuer, audience e finalidade.

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

Apresentação do capítulo

O capítulo anterior apresentou OpenID Connect e mostrou que , , logout e outros artefatos podem utilizar Web como formato. Entretanto, reconhecer três segmentos separados por pontos não é suficiente para operar com segurança. É necessário compreender a família , a diferença entre e proteção criptográfica, a seleção de algoritmos, a distribuição de chaves e as validações específicas de cada perfil.

é uma estrutura para transportar . protege conteúdo com assinatura digital ou código de autenticação de mensagem. protege a confidencialidade por criptografia autenticada. representa uma chave em ; um publica conjuntos de chaves; registra algoritmos e identificadores. Esses componentes se combinam, mas não são sinônimos. Um pode ser um , um ou uma estrutura aninhada.

Em corporativas, os erros mais graves raramente estão na decodificação . Eles surgem quando o consumidor aceita algoritmos não previstos, escolhe chaves usando dados não confiáveis, ignora issuer ou audience, mistura e , reutiliza a mesma regra para tipos distintos de ou mantém rotação de chaves incompatível com e tempo de vida dos .

Este capítulo aprofunda serializações compacta e , protegidos, , , , thumbprints, rotação, , aninhados e perfis de . Também incorpora as boas práticas da 8725 e a atualização da 9864 sobre identificadores de algoritmos totalmente especificados, além de relacionar os conceitos a Axway , Azure Management e bibliotecas de validação.

Como estudar este capítulo

Para cada exemplo, responda em ordem: qual é o tipo do objeto, quem o emitiu, quem é o destinatário, qual algoritmo é permitido, de onde vem a chave, quais bytes foram protegidos e quais precisam ser validadas. Essa sequência reduz a chance de aceitar um apenas porque sua assinatura parece válida.

Objetivos de aprendizagem

  • Distinguir , , , , , e .
  • Explicar , , e o impacto da representação exata dos bytes.
  • Interpretar registradas, públicas e privadas sem confundir presença com confiança.
  • Descrever Compact Serialization e Serialization.
  • Diferenciar assinatura digital e MAC, incluindo implicações de não repúdio e distribuição de chaves.
  • Restringir algoritmos por allowlist e evitar algorithm confusion.
  • Usar , , e de forma segura e contextual.
  • Interpretar , EC, OKP e oct e separar material público de material privado.
  • Planejar , , rotação, sobreposição e retirada de chaves.
  • Explicar os parâmetros e em e a estrutura de cinco partes.
  • Projetar aninhados e decidir quando assinar, criptografar ou usar ambos.
  • Validar de forma criptográfica, temporal e semântica.
  • Aplicar o perfil para e distinguir outros tipos de .
  • Diagnosticar falhas de assinatura, audience, issuer, , , relógio e criptografia.

Estrutura do capítulo

  • 18.1 A família e suas responsabilidades
  • 18.2 , e canônico
  • 18.3 : e envelope de segurança
  • 18.4 registradas, públicas e privadas
  • 18.5 : signing input e serializações
  • 18.6 Assinatura digital e MAC
  • 18.7 Algoritmos, allowlists e 9864
  • 18.8 , , e
  • 18.9 : anatomia e tipos de chave
  • 18.10 e distribuição de chaves
  • 18.11 , thumbprints e certificados
  • 18.12 Rotação, e retirada de chaves
  • 18.13 : , e Content Encryption Key
  • 18.14 Serializações e múltiplos destinatários
  • 18.15 aninhado e ordem das proteções
  • 18.16 de validação segura
  • 18.17 Profile for 2.0
  • 18.18 Outros perfis de
  • 18.19 Proof-of-possession e cnf
  • 18.20 Aplicação em , Axway e Azure
  • 18.21 Ameaças e hardening
  • 18.22 Privacidade, e minimização
  • 18.23
  • 18.24 Estudos de caso e laboratórios
  • Resumo, checklist, exercícios, glossário e referências
Família JOSE separando JWT, JWS, JWE, JWK, JWKS e JWA por responsabilidade
Figura 1 - é uma família de estruturas; é apenas uma parte do modelo.

18.1 A família e suas responsabilidades

Object Signing and Encryption é o conjunto de especificações que define estruturas para assinatura, autenticação, criptografia e representação de chaves. O objetivo é transportar objetos de segurança de forma compatível com , e aplicações que já utilizam . A família foi dividida em documentos para separar estrutura, algoritmos, chaves e semântica de .

define um conjunto de e regras de processamento. define como proteger uma sequência de bytes com assinatura digital ou MAC. define criptografia autenticada e gerenciamento da chave de conteúdo. define como representar chaves criptográficas em , enquanto associa identificadores como RS256, ES256 ou A256GCM a operações concretas.

Um chamado comercialmente de geralmente é um em serialização compacta, mas isso é uma convenção frequente, não uma equivalência formal. Também existem criptografados como , JWSs cujo não é um e objetos com múltiplas assinaturas ou destinatários usando serialização .

Tabela 1 - Cada componente JOSE resolve uma responsabilidade diferente.
EstruturaProteção ou funçãoExemplo de uso
JWTConjunto de claims com semântica definida por um perfil.ID Token, access token, client assertion ou logout token.
JWSIntegridade e autenticação por assinatura ou MAC.Token assinado e webhook assinado.
JWEConfidencialidade e integridade por criptografia autenticada.Token com claims sensíveis destinado a um cliente específico.
JWK / JWKSRepresentação e publicação de chaves.Chaves públicas do issuer para validação.
JWAIdentificadores de algoritmos e parâmetros.RS256, ES256, A256GCM e RSA-OAEP-256.

18.2 , e representação

transforma bytes em caracteres seguros para ao substituir os caracteres + e / e normalmente remover o preenchimento =. A operação não cifra, não comprime e não oferece integridade. Qualquer pessoa que receba um compacto pode decodificar e , ainda que não possua a chave de assinatura.

Antes da codificação, objetos são convertidos para bytes . Espaços, ordem de membros, escapes e formas numéricas podem produzir sequências de bytes diferentes mesmo quando duas representações parecem semanticamente equivalentes. No , a assinatura cobre a representação exata usada no signing input; uma biblioteca não deve decodificar o e serializá-lo novamente para verificar a assinatura.

permite flexibilidade que exige validação defensiva. Nomes duplicados de membros, números fora do intervalo esperado, strings com normalização diferente e múltiplas representações podem causar interpretações divergentes entre bibliotecas. O perfil que usa deve definir , tipos e limites aceitos, rejeitando objetos ambíguos.

Exemplo conceitual - transformação do header
header JSON: {"alg":"RS256","typ":"JWT","kid":"key-2026-07"}
BASE64URL(UTF8(header))
  eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0yMDI2LTA3In0
Base64url e apenas codificacao. O conteudo permanece legivel.

Erro recorrente

Ocultar um no navegador, em um ou em um não equivale a proteger confidencialidade. Um assinado continua legível. Para impedir leitura do conteúdo, é necessário ou outra proteção de canal e armazenamento adequada.

18.3 : e envelope de segurança

Uma é uma afirmação representada por um par nome-valor. O é um objeto que reúne essas afirmações. O formato não determina automaticamente quem pode emitir a , por quanto tempo ela é válida ou como deve ser interpretada. Essas regras pertencem ao perfil e à relação de confiança entre emissor e destinatário.

pode ser protegido por ou . Em um , as são legíveis, mas alterações são detectáveis quando a assinatura é verificada corretamente. Em um , o conteúdo é cifrado e autenticado. Em ambos os casos, o destinatário ainda precisa validar issuer, audience, tempo, tipo e regras específicas da aplicação.

não devem transportar estado arbitrário apenas porque o suporta . grandes aumentam uso de banda, tamanho de , pressão sobre e risco de exposição. A emissão deve privilegiar dados estáveis e necessários à decisão, usando identificadores para informações que precisam ser consultadas em tempo real.

Tabela 2 - Claims registradas possuem semântica geral, mas o perfil define a obrigação concreta.
ClaimSemântica geralValidação típica
issIdentificador do emissor.Comparação exata com issuer permitido.
subIdentificador do sujeito no emissor.Interpretar junto a iss e ao perfil.
audDestinatário ou conjunto de destinatários.Conter a audience da API ou cliente.
expInstante após o qual o token não deve ser aceito.Relógio sincronizado e tolerância pequena.
nbfInstante antes do qual o token não deve ser aceito.Rejeitar uso antecipado fora da tolerância.
iatInstante de emissão.Verificar plausibilidade e políticas de idade.
jtiIdentificador único do token.Detecção de replay ou auditoria quando o perfil exigir.

18.4 registradas, públicas e privadas

registradas possuem nomes e semântica documentados no registro , como iss, sub, aud, exp e jti. Elas não são obrigatórias em todo , mas perfis como e 9068 especificam quais devem aparecer. O uso correto depende de respeitar o tipo previsto e a finalidade do perfil.

públicas usam nomes resistentes a colisão, normalmente registrados ou baseados em controlada pela organização. privadas são acordos locais entre emissor e consumidor, como roles, tenant_id ou transaction_limit. Elas são úteis, mas podem colidir entre ecossistemas e mudar de significado quando um atravessa fronteiras organizacionais.

Uma de autorização não deve ser aceita apenas por existir. O resource server precisa conhecer o issuer, o perfil, o namespace, o tipo e a política que a produz. Por exemplo, roles emitidas por um diretório podem representar grupos administrativos e não permissões de domínio. A aplicação deve transformar confiáveis em decisões locais explícitas.

Design de

Prefira nomes estáveis, tipos simples e significado documentado. Evite incluir segredos, dados pessoais desnecessários, listas enormes de grupos ou objetos de negócio que mudam durante a validade do .

JWS Compact Serialization com protected header, payload, assinatura e signing input
Figura 2 - A assinatura cobre o protected e o codificados, unidos por um ponto.

18.5 : signing input e serializações

Compact Serialization possui três partes: protected , e assinatura. As duas primeiras são codificadas em e unidas por um ponto para formar o signing input. O algoritmo usa esse valor e a chave apropriada para produzir a terceira parte. A verificação reconstrói os mesmos bytes e valida a operação criptográfica.

Serialization representa o objeto como e permite múltiplas assinaturas sobre o mesmo . A forma flattened contém uma assinatura; a forma general contém uma coleção. Esse modelo é útil quando diferentes organizações ou chaves precisam assinar o mesmo conteúdo, embora aumente a complexidade de política e processamento.

A 7797 permite não codificado em por meio do parâmetro b64 no protected e do uso de . Essa opção é especializada e pode melhorar integração com conteúdo destacado, mas exige suporte explícito e cuidado com caracteres que interferem na serialização compacta. comuns devem preferir o comportamento padrão oferecido por bibliotecas maduras.

Pseudocódigo - construção conceitual de um JWS
protected = BASE64URL(UTF8({"alg":"ES256","kid":"ec-1"}))
payload   = BASE64URL(payload_bytes)
signing_input = protected + "." + payload
signature = ECDSA_sign(private_key, signing_input)
jws_compact = protected + "." + payload + "." + BASE64URL(signature)

18.6 Assinatura digital e MAC

Algoritmos assimétricos usam chave privada para assinar e chave pública para verificar. O emissor mantém a chave privada sob controle e distribui apenas material público. Esse modelo facilita validação por várias e reduz a capacidade dos validadores de emitir , pois possuir a chave pública não permite criar novas assinaturas.

Algoritmos de MAC, como , usam o mesmo segredo para produzir e verificar o código. Todo componente capaz de validar também pode gerar um indistinguível. Em arquiteturas com muitos resource servers, o compartilhamento do segredo amplia o impacto de comprometimento e dificulta atribuir qual componente produziu um .

Assinatura digital não cria não repúdio jurídico automaticamente. , controle de chave, certificação, política, auditoria e contexto são necessários. Da mesma forma, verificar a assinatura prova apenas que os bytes correspondem a uma chave aceita; não prova que o é atual, destinado àquela ou autorizado para a operação.

Tabela 3 - A escolha do modelo altera fronteiras de confiança e resposta a incidentes.
ModeloDistribuiçãoImplicação operacional
Assinatura assimétricaPrivada no emissor; pública nos validadores.Validadores não conseguem emitir tokens. Facilita JWKS e rotação.
MAC simétricoMesmo segredo no emissor e nos validadores.Qualquer validador comprometido pode fabricar tokens.
Assinatura com HSM/KMSOperação privada em módulo controlado.Reduz exposição da chave e melhora auditoria, com custo e dependência.

18.7 Algoritmos, allowlists e 9864

O declara o algoritmo usado, mas não deve controlar sozinho a decisão. O consumidor precisa possuir uma allowlist configurada pelo perfil, pelo issuer e pelo tipo de . Se a aplicação aceita qualquer algoritmo anunciado, pode ocorrer algorithm confusion, ou uso de uma chave em operação incompatível.

Algoritmos precisam ser avaliados pelo conjunto completo de parâmetros, tamanho de chave, biblioteca, requisitos regulatórios e interoperabilidade. RS256 permanece amplamente suportado; PS256 usa -PSS; ES256 usa com P-256 e . Algoritmos modernos baseados em EdDSA devem considerar as atualizações de identificadores totalmente especificados e o suporte real do ecossistema.

A 9864, publicada em 2025, diferencia algoritmos totalmente especificados daqueles que dependem de parâmetros externos para determinar a operação. Ela atualiza registros e deprecia identificadores polimórficos em situações cobertas pela especificação. Arquiteturas novas devem consultar o registro atual e evitar negociar nomes ambíguos apenas por compatibilidade histórica.

Tabela 4 - O algoritmo deve ser escolhido por política, não pelo conteúdo não confiável do token.
AlgoritmoFamíliaAtenção
RS256RSA PKCS#1 v1.5 com SHA-256Amplo suporte; use chave suficiente e rotação governada.
PS256RSA-PSS com SHA-256Padding probabilístico; confirme suporte de todos os componentes.
ES256ECDSA P-256 com SHA-256Assinatura compacta; requer implementação correta de ECDSA.
HS256HMAC com SHA-256Segredo compartilhado transforma validadores em emissores potenciais.
noneSem proteção criptográficaNão aceitar em tokens de segurança.
EdDSA / nomes atualizadosEdwards curvesConsultar RFC 9864 e registro IANA para identificador e suporte atual.

Regra de segurança

Configure algoritmo esperado junto ao issuer e ao tipo de . Não derive a allowlist do próprio e não reutilize a mesma chave em famílias de algoritmo incompatíveis.

18.8 , , e

O parâmetro declara o tipo de objeto para a aplicação. Ele não muda a criptografia, mas ajuda a impedir confusão entre com finalidades diferentes. A 8725 recomenda tipagem explícita e regras mutuamente exclusivas. O perfil de da 9068 usa at+ , enquanto costumam usar ou depender do contexto .

descreve o tipo do , sendo especialmente útil em objetos aninhados. Um que contém um assinado pode usar igual a . é uma dica para selecionar uma chave entre várias; não é identificador global, não prova propriedade e pode se repetir entre issuers.

lista parâmetros de que precisam ser compreendidos para processar o objeto. Se um item crítico é desconhecido, o consumidor deve rejeitar o . Ignorar destrói a capacidade de extensões modificarem a semântica de segurança. que influenciam a operação criptográfica devem estar na área protegida, não apenas em campos não protegidos da serialização .

Tabela 5 - Headers orientam processamento, mas precisam de política local.
HeaderFunçãoValidação
typTipo de objeto para a aplicação.Comparar com o perfil esperado e separar regras.
ctyTipo do conteúdo protegido.Usar em nesting e conteúdos não óbvios.
kidSelecionar chave candidata.Resolver apenas dentro do issuer confiável.
critExtensões que precisam ser entendidas.Rejeitar se qualquer item não for suportado.
jku / x5uURL de chaves ou certificados.Não buscar livremente a partir de token não confiável.

18.9 : anatomia e tipos de chave

Web Key representa material criptográfico com parâmetros definidos por kty. Uma chave pública inclui n e e; uma chave EC inclui crv, x e y; uma chave OKP inclui curva e coordenada pública; uma chave simétrica oct inclui k. Parâmetros privados como d, p, q ou k não devem aparecer em públicos.

use indica finalidade ampla, como sig ou . key_ops lista operações específicas, como verify, sign, encrypt ou decrypt. pode restringir a associação com um algoritmo. Esses campos precisam ser coerentes entre si e com a política da aplicação; não devem ampliar automaticamente o que a chave pode fazer.

Chaves devem possuir origem, proprietário, data de ativação, data de retirada, finalidade e procedimento de revogação. Representar uma chave em não elimina controles de segredo. Chaves privadas devem permanecer em , , cofre ou armazenamento protegido e ser carregadas apenas pelos processos autorizados.

Exemplo - JWK pública RSA
{
  "kty": "RSA",
  "kid": "signing-2026-07",
  "use": "sig",
  "alg": "RS256",
  "n": "sXch...base64url-modulus...",
  "e": "AQAB"
}

Material privado

Um público deve conter somente parâmetros públicos. A presença de d, p, q, dp, dq, qi ou k pode expor chave privada ou segredo simétrico e exige resposta imediata a incidente.

18.10 e distribuição de chaves

Um Web Key Set contém a propriedade keys com uma lista de . Provedores de identidade publicam para que clientes e resource servers verifiquem assinaturas. O deve ser obtido por configuração confiável ou metadados vinculados ao issuer, nunca por uma arbitrária fornecida pelo .

O consumidor mantém para evitar dependência de rede em cada requisição. O precisa respeitar políticas , possuir limite de tamanho, , atualização controlada e fallback seguro. Em falha temporária do , chaves já conhecidas podem continuar válidas conforme política, mas não se deve aceitar sem chave apenas para preservar disponibilidade.

A validação deve primeiro fixar o issuer permitido, localizar o conjunto correspondente e então usar , kty, e key_ops para filtrar candidatos. Um global indexado apenas por permite colisões entre tenants e issuers. O índice seguro inclui pelo menos issuer e identificador da chave.

Tabela 6 - Distribuição de chaves é parte da disponibilidade e da segurança do token.
ComponenteResponsabilidadeFalha típica
Issuer configurationFixar domínio de confiança e perfil.Token de outro tenant ou ambiente aceito.
jwks_uriPublicar chaves públicas atuais.URL trocada ou indisponível.
CacheReduzir latência e dependência por requisição.Chave nova não propagada ou chave antiga eterna.
Seleção por kidEscolher candidata dentro do conjunto confiável.Colisão global ou kid inexistente.
AtualizaçãoBuscar conjunto quando necessário.Refresh storm induzido por tokens maliciosos.

18.11 , thumbprints e certificados

é um identificador escolhido pelo emissor e pode ser uma sequência opaca. Ele facilita rotação, mas não possui unicidade global. , definido pela 7638, calcula um digest sobre uma representação canônica de membros obrigatórios da chave e produz identificador derivado do próprio material público.

x5c pode carregar uma cadeia de certificados ; x5t e x5t#S256 carregam thumbprints do certificado. Quando certificados são usados, o consumidor precisa validar cadeia, uso de chave, validade e confiança conforme o perfil. Comparar apenas um recebido no não cria uma âncora confiável.

jku e x5u apontam para recursos remotos. Seguir essas sem allowlist cria , acesso a redes internas e substituição de chaves. Em plataformas corporativas, de metadata e devem ser pré-configurados, resolvidos por canais controlados e monitorados.

Pseudocódigo - JWK Thumbprint
thumbprint_input = canonical_json({
  "e": "AQAB",
  "kty": "RSA",
  "n": "sXch..."
})
jwk_thumbprint = BASE64URL(SHA256(UTF8(thumbprint_input)))
Rotação de chaves com publicação antecipada, sobreposição e retirada segura
Figura 3 - Rotação segura publica a chave nova antes de usá-la e mantém a antiga durante a sobreposição.

18.12 Rotação, e retirada de chaves

Rotação planejada começa com a publicação antecipada da nova chave. Depois que tiveram oportunidade de atualizá-la, o emissor passa a assinar novos com o novo . A chave anterior permanece publicada até que todos os por ela assinados tenham expirado, acrescidos de tolerâncias de relógio, filas, e atraso de propagação.

Retirar a chave imediatamente após trocar o signer causa falhas em ainda válidos. Manter chaves indefinidamente reduz capacidade de revogação e amplia superfície. A janela deve ser calculada com base em vida máxima dos , refresh, -control, tempos de atualização e comportamento de componentes desconectados.

Quando um desconhecido aparece, o validador pode atualizar o uma vez dentro de limites e usar coalescência para evitar múltiplas buscas simultâneas. aleatórios não devem provocar uma requisição por tentativa. , negativo curto e protegem o de metadata e o próprio .

Em comprometimento de chave, a prioridade pode exigir retirada imediata e invalidação de , aceitando indisponibilidade controlada. O plano precisa definir detecção, rotação emergencial, comunicação aos consumidores, revogação, análise de emissão indevida e restauração de confiança.

Equação operacional

Tempo mínimo de sobreposição deve considerar: vida máxima do + tolerância de relógio + atraso de + filas e . Use métricas reais, não apenas o valor exp nominal.

JWE Compact Serialization com protected header, encrypted key, IV, ciphertext e tag
Figura 4 - separa gerenciamento de chave e criptografia autenticada do conteúdo.

18.13 : , e Content Encryption Key

utiliza uma Content Encryption Key, ou , para cifrar o plaintext com algoritmo de criptografia autenticada indicado por . O parâmetro define como essa é protegida, transportada, derivada ou compartilhada com o destinatário. Portanto, e possuem responsabilidades diferentes e ambos precisam ser permitidos pela política.

Em -OAEP-256, a é cifrada com a chave pública do destinatário. Em dir, a chave simétrica compartilhada é usada diretamente como . Em ECDH-ES, uma operação de acordo de chaves deriva material a partir de chaves elípticas. A escolha altera distribuição de chaves, forward secrecy, interoperabilidade e risco de comprometimento.

Algoritmos como A256GCM oferecem confidencialidade e integridade em uma única operação autenticada. IV ou precisa obedecer aos requisitos do algoritmo e não pode ser reutilizado sob a mesma chave quando isso comprometer segurança. A authentication tag deve ser validada antes de liberar qualquer plaintext à aplicação.

Criptografar não elimina necessidade de assinatura quando o destinatário precisa verificar autoria de forma separada. Um prova que a tag é válida sob a chave de criptografia, mas a identidade do produtor depende do mecanismo de key management e do perfil. aninhados podem combinar assinatura e criptografia.

Tabela 7 - JWE combina key management, content encryption e metadados protegidos.
ParâmetroExemploResponsabilidade
algRSA-OAEP-256Proteger ou estabelecer a CEK para o destinatário.
encA256GCMCifrar o conteúdo e produzir tag de autenticação.
zipDEFComprimir antes da criptografia; usar apenas com análise de risco.
kidrecipient-key-2Selecionar chave de decriptação dentro do domínio confiável.
ctyJWTIndicar que o plaintext é um JWT aninhado.

18.14 Serializações e múltiplos destinatários

A serialização compacta possui cinco partes: protected , encrypted key, IV, ciphertext e authentication tag. Ela é adequada para um destinatário e transporte em parâmetros ou . A serialização permite campos protegidos e não protegidos, Additional Authenticated Data e múltiplos destinatários, cada um com sua encrypted key.

Em múltiplos destinatários, o mesmo ciphertext pode ser compartilhado enquanto a é protegida separadamente para cada chave. Isso reduz duplicação, mas cria política mais complexa: todos os destinatários recebem o mesmo conteúdo e precisam ser governados como conjunto. Retirar um destinatário exige nova criptografia para futuras mensagens.

não protegidos podem ser alterados sem invalidar a tag quando não participam de . Informações que determinam algoritmo, chave, tipo ou interpretação devem estar no protected . O consumidor precisa saber quais campos são autenticados e rejeitar combinações inconsistentes.

Mapa da JWE Compact Serialization
protected.encrypted_key.iv.ciphertext.tag
1. protected: alg, enc, kid, cty
2. encrypted_key: CEK protegida para o destinatario
3. iv: valor unico exigido pelo algoritmo
4. ciphertext: plaintext cifrado
5. tag: autenticidade do ciphertext e dados associados

18.15 aninhado e ordem das proteções

Um aplica e em sequência. O padrão comum é assinar primeiro e criptografar depois. O emissor cria um que preserva integridade e autoria, então usa esse como plaintext de um destinado ao consumidor. O externo usa igual a para indicar o conteúdo aninhado.

Após decriptar, o destinatário ainda precisa validar o interno. A validade da tag externa não substitui assinatura, issuer, audience ou tempo do interno. Da mesma forma, a assinatura interna não prova que o objeto externo foi destinado ao componente que o recebeu.

Criptografar e depois assinar expõe metadados e a assinatura externa, além de produzir semântica diferente. Perfis devem definir a ordem, algoritmos, tipos e tratamento de erros. Não invente uma composição própria quando um perfil padronizado ou canal com assinado atende ao requisito.

Tabela 8 - A escolha depende de confidencialidade, autonomia, revogação e complexidade.
EstratégiaPropriedadeUso
Somente JWSIntegridade e origem; payload legível.Access tokens comuns em canais TLS.
Somente JWEConfidencialidade e integridade sob a chave de criptografia.Conteúdo destinado a receptor específico.
JWS dentro de JWEAutoria interna e confidencialidade externa.JWT aninhado com claims sensíveis.
Referência opacaServidor consulta estado por identificador.Revogação e minimização quando não é necessário self-contained.
Pipeline seguro de validação de JWT em um resource server
Figura 5 - Validação segura é uma cadeia; pular uma etapa altera o modelo de confiança.

18.16 de validação segura

O validador começa pelo contexto externo: , issuer esperado, tipo de e perfil. Em seguida, faz parsing defensivo com limites de tamanho, número de segmentos, profundidade e tipos. O não confiável é lido apenas para selecionar uma operação permitida dentro da configuração.

A seleção da chave ocorre no conjunto associado ao issuer. precisa estar na allowlist e ser compatível com kty, use e key_ops. A assinatura, MAC ou tag é verificada integralmente. Falhas criptográficas encerram o processamento sem tentar algoritmos alternativos não autorizados.

Depois da criptografia vêm as validações semânticas: iss, aud, exp, nbf, iat, , , , jti, , tenant e do perfil. Regras para , , client assertion e logout devem ser mutuamente exclusivas. Aceitar um em múltiplos contextos favorece cross- confusion.

Por fim, a autorização aplica regras locais. Um válido não implica permissão para qualquer objeto. O deve verificar operação, recurso, titularidade, contexto de negócio e políticas atuais. devem registrar resultado e identificadores mínimos, nunca o completo.

Tabela 9 - Parsing, autenticação do token e autorização são etapas diferentes.
EtapaPerguntaResultado de falha
ContextoQue tipo de token e issuer este endpoint aceita?Rejeitar antes de confiança em headers.
ParsingEstrutura, tamanho e JSON são aceitáveis?Erro genérico sem processamento profundo.
Algoritmo e chaveAlgoritmo permitido e chave do issuer correto?Rejeitar; atualizar JWKS apenas de modo controlado.
CriptografiaAssinatura, MAC ou tag são válidos?Rejeitar sem usar claims.
ClaimsAudience, tempo, tipo e regras do perfil são válidos?401 ou erro do protocolo correspondente.
AutorizaçãoA identidade pode executar a ação no recurso?403 ou resposta de domínio apropriada.

18.17 Profile for 2.0

A 9068 define um perfil interoperável para . Ela não obriga a usar ; continuam podendo ser opacos. Quando o perfil é adotado, o deve ser assinado, não pode usar none e deve declarar igual a at+ , além de e regras específicas para issuer, subject, audience, tempo, client_id e autorização.

O resource server valida o para sua própria audience. podem aparecer em , e informações adicionais de autorização podem ser transportadas conforme o perfil e acordos. O não deve ser aceito por de outra audiência apenas porque foi emitido pelo mesmo Authorization Server.

reduzem chamadas de introspecção e permitem validação local, mas tornam revogação imediata mais difícil. Vida curta, rotação, sender constraint, listas emergenciais e políticas de sessão podem reduzir exposição. Para dados que precisam refletir estado instantâneo, introspecção ou consulta de autorização pode ser mais adequada.

Exemplo conceitual - header e claims de access token
{
  "typ": "at+jwt",
  "alg": "RS256",
  "kid": "as-signing-4"
}.
{
  "iss": "https://auth.example",
  "sub": "user-481",
  "aud": "https://api.example/payments",
  "client_id": "mobile-app",
  "scope": "payments.read payments.create",
  "iat": 1784126100,
  "exp": 1784126700,
  "jti": "8b28b730-..."
}

não é

O é destinado ao resource server e descreve autoridade. O é destinado ao cliente e descreve autenticação. Mesmo que ambos sejam assinados pelo mesmo issuer, suas regras não podem ser intercambiadas.

18.18 Outros perfis de

é usado em diversos perfis. seguem regras do OpenID Connect. Client assertions da 7523 permitem autenticar um cliente no ou apresentar um grant. Objects da 9101 protegem parâmetros de autorização. Logout carregam eventos específicos de sessão. Respostas de introspecção podem ser protegidas como conforme 9701.

Cada perfil define , audience, obrigatórias, tempo, e destinatário. Uma biblioteca genérica que apenas verifica assinatura não conhece essas regras. A aplicação precisa selecionar um validador ou configuração específica para cada tipo e manter separados quando possível.

Novos formatos continuam surgindo. A 9901, publicada em 2025, padroniza Selective Disclosure para permitir apresentação seletiva de em cenários de credenciais. Esse mecanismo possui modelo próprio de emissão, apresentação, disclosure e key binding; não deve ser tratado como um tradicional apenas porque reutiliza componentes .

Tabela 10 - Tipos diferentes exigem regras de validação mutuamente exclusivas.
PerfilDestinatárioControle distintivo
OIDC ID TokenRelying Partyclient_id em aud, nonce e regras OIDC.
JWT access tokenResource Servertyp at+jwt, audience da API e claims RFC 9068.
Client assertionAuthorization Serveraud do endpoint, iss/sub do cliente e replay por jti.
Logout tokenRelying Partyevents, sid/sub, jti e ausência de nonce.
Request ObjectAuthorization ServerParâmetros de authorization request protegidos.
SD-JWTVerifier de credencialDisclosures selecionadas e regras de key binding.

18.19 Proof-of-possession e cnf

podem ser usados por qualquer parte que obtenha o valor. Sender-constrained vinculam o uso a uma chave ou certificado. A cnf confirma qual chave precisa ser demonstrada. O binding pode usar de chave , de certificado ou parâmetros definidos pelo perfil.

Em DPoP, o cliente apresenta uma prova por requisição e o pode conter jkt, o da chave pública. Em -bound , cnf pode conter x5t#S256 do certificado usado no canal. O resource server verifica tanto o quanto a prova ou certificado correspondente.

Proof-of-possession reduz de roubado, mas adiciona gestão de chaves, sincronização, , e diagnóstico. O precisa preservar ou verificar a evidência no ponto correto. Terminar em um componente e encaminhar apenas um não confiável ao destrói o vínculo se esse puder ser injetado externamente.

Exemplos conceituais - confirmação da chave
"cnf": {
  "jkt": "0ZcOCORZNYzC-7hV..."
}
# ou, para certificado mTLS
"cnf": {
  "x5t#S256": "qP3Q...thumbprint..."
}

18.20 Aplicação em , Axway e Azure

O atua como Policy Enforcement Point e precisa separar validação do de autorização da rota. Uma política robusta fixa issuer, audience, algoritmos, local de metadata, obrigatórias e comportamento de . derivados de devem substituir valores externos e ser enviados ao apenas por canal confiável.

No Axway , filtros de validação e bibliotecas de identidade podem verificar assinatura, e certificados. A configuração deve limitar algoritmos, escolher store ou por ambiente e correlacionar falhas com seguro. Políticas compartilhadas evitam divergência, mas precisam permitir diferenças de audience e perfil entre .

No Azure Management, validate- e validate-azure-ad- integram validação a OpenID configuration, audiences e required- . A política deve verificar o destinado à e não apenas aceitar qualquer do tenant. de metadata e rotação precisam ser considerados em mudanças e incidentes.

Quando o reemite interno, ocorre uma nova relação de confiança. O externo deve ser validado primeiro; o interno precisa ter issuer, audience, vida e mínimos próprios. O confia no emissor interno, não no original, e a correlação deve preservar identificadores para auditoria.

Exemplo conceitual - política de validação no gateway
<validate-jwt header-name="Authorization"
              require-scheme="Bearer"
              failed-validation-httpcode="401">
  <openid-config url="https://auth.example/.well-known/openid-configuration" />
  <audiences>
    <audience>https://api.example/payments</audience>
  </audiences>
  <required-claims>
    <claim name="scope" match="all">
      <value>payments.read</value>
    </claim>
  </required-claims>
</validate-jwt>

Propagação de identidade

Remova de identidade recebidos da Internet antes de criar internos. O deve aceitar esses valores apenas do autenticado e, para decisões críticas, continuar aplicando autorização de domínio.

18.21 Ameaças e hardening

Algorithm confusion ocorre quando o consumidor permite que selecione uma operação não prevista, como usar chave pública como segredo . A defesa é uma allowlist fixa, chaves separadas por uso e biblioteca atualizada. none deve ser rejeitado em de segurança, salvo perfil excepcional e explicitamente isolado.

Substitution e cross- confusion ocorrem quando um válido é aceito no contexto errado. usado como , de outra audience, de staging em produção e client assertion aceita por são exemplos. explícito, regras mutuamente exclusivas, issuer e audience reduzem o risco.

jku, x5u e campos controlados pelo podem induzir ou substituir chaves. pode causar path traversal ou consulta a banco insegura quando concatenado sem validação. O validador deve tratar como entrada hostil, usar pré-configurados e limitar tamanho e caracteres.

Compression oracle é um risco quando dados secretos e controlados pelo atacante são comprimidos antes da criptografia e o tamanho pode ser observado. A 8725 recomenda evitar compressão de entradas de criptografia em cenários sensíveis. também precisam de limites para impedir consumo excessivo de CPU e memória.

Tabela 11 - O hardening combina criptografia, parsing, rede e governança.
AmeaçaExemploControle
Algorithm confusionHS256 aceito com material destinado a RSA.Allowlist, compatibilidade kty/alg e bibliotecas maduras.
Cross-JWT confusionID Token aceito como access token.typ, audience, perfil e validadores separados.
Key injection / SSRFjku aponta para host controlado ou rede interna.Endpoints pré-configurados e egress controlado.
ReplayToken copiado dentro da validade.Vida curta, jti quando aplicável e sender constraint.
Key compromiseChave privada exposta.HSM/KMS, rotação emergencial e retirada coordenada.
DoS criptográficoTokens enormes ou kid aleatório forçam refresh.Limites, cache negativo, rate limit e circuit breaker.

18.22 Privacidade, e minimização

Um pode conter nome, e-mail, grupos, tenant, identificadores e dados de negócio em texto legível. Registrar o completo em access , , APM, ferramentas de suporte ou mensagens de erro replica dados e credenciais por diversos sistemas. Mesmo expirados podem revelar informações pessoais ou arquitetura interna.

devem registrar apenas campos necessários: issuer normalizado, audience esperada, , resultado de validação, código de falha, não reversível do jti ou subject quando permitido e correlation ID. O valor bruto do Authorization deve ser mascarado antes de chegar a genéricos.

Criptografia reduz leitura durante transporte e armazenamento, mas o destinatário precisa decriptar e pode vazar o plaintext em . Minimização continua sendo o controle mais eficiente. de autorização também podem revelar estrutura organizacional; avalie necessidade, retenção e acesso.

Regra de observabilidade

Colete evidência suficiente para diagnosticar sem copiar credenciais. Nunca publique reais em tickets, chats, documentação ou ferramentas online de decodificação.

18.23 orientado por evidências

O diagnóstico começa classificando a falha. Erro de parsing indica estrutura, ou . Invalid signature aponta para chave, algoritmo, bytes, ambiente ou corrupção. Unknown sugere rotação, ou issuer incorreto. Invalid audience e invalid issuer são falhas semânticas, não criptográficas.

Compare o com metadata do issuer sem expor o valor completo. Registre , , , iss, aud, exp e horário local. Consulte o confiável e confirme kty, use, key_ops e . Verifique se a chave nova já está publicada e se a antiga ainda deveria permanecer. Em , compare e relógios entre instâncias.

Para , separe falha de key management, decriptação e tag. Chave privada errada, incompatível, IV inválido e ciphertext alterado produzem sintomas distintos na biblioteca, mas a resposta externa deve ser genérica para não criar oracle. Preserve detalhes apenas em restritos.

Em , correlacione access , de política, métricas de metadata, e . Uma resposta 401 pode ser produzida pelo , pela ou por outro . Identifique o componente exato e a etapa que falhou antes de alterar configuração.

Tabela 12 - Sintomas de token apontam para etapas diferentes do pipeline.
SintomaHipóteses iniciaisEvidência
Malformed JWTSegmentos, Base64url, JSON ou tamanho.Contagem de partes e erro do parser.
Invalid signatureChave errada, alg, token alterado ou ambiente.Issuer, kid, JWK e bytes recebidos.
Unknown kidRotação, cache ou issuer equivocado.JWKS atual, cache age e timeline de rotação.
Expired / not yet validRelógio, exp, nbf ou tolerância.UTC de todas as instâncias e claims temporais.
Invalid audienceToken emitido para outro recurso.aud, resource solicitado e configuração da API.
Decryption failedChave privada, alg, enc, IV ou tag.Configuração JWE e erro interno restrito.

18.24 Estudos de caso e laboratórios

Caso 1 - rotação intermitente: algumas instâncias aceitam o novo e outras retornam 401. A investigação mostra locais com tempos diferentes e atualização sem coalescência. A correção publica a chave com antecedência, padroniza , adiciona refresh controlado e mantém a chave antiga durante a validade máxima.

Caso 2 - válido para audiência errada: o verifica a assinatura de um emitido para o portal e encaminha a chamada à . A correção exige e audience da , separa validadores de e e adiciona teste negativo ao .

Caso 3 - chave por do : uma biblioteca segue jku e permite que o atacante forneça sua própria chave. A correção remove resolução dinâmica, fixa metadata por issuer, bloqueia egress não necessário e revisa já aceitos.

Caso 4 - sensíveis em : um incidente revela que APM armazenava Authorization completo. A correção mascara o no primeiro ponto de entrada, reduz emitidas, aplica retenção e revoga potencialmente expostos.

Laboratório 1 - validar um com biblioteca local

  • Gere um par de chaves de laboratório em ambiente isolado e autorizado.
  • Emita um de curta duração com iss, aud, exp, e .
  • Valide com allowlist de algoritmo e chave pública pré-configurada.
  • Altere um byte do e observe a falha criptográfica.
  • Mude aud sem reassinar para comparar falha de assinatura e falha semântica.

Laboratório 2 - simular rotação de

  • Publique K1 e emita com K1.
  • Adicione K2 ao conjunto antes de usá-la para assinatura.
  • Atualize o signer para K2 e mantenha K1 disponível.
  • Observe comportamento de em diferentes instâncias.
  • Remova K1 apenas após expiração dos e da margem operacional.

Laboratório 3 - testes negativos obrigatórios

  • Rejeite none e algoritmo fora da allowlist.
  • Rejeite issuer, audience e incorretos.
  • Rejeite expirado, futuro ou excessivamente grande.
  • Rejeite desconhecido sem provocar refresh ilimitado.
  • Rejeite desconhecido e remotos não autorizados.
  • Rejeite apresentado à como .

Segurança do laboratório

Use somente chaves e fictícios. Nunca copie credenciais de produção para ferramentas de teste, sites de decodificação ou documentos de treinamento.

Resumo do capítulo

separa , assinatura, criptografia, algoritmos e representação de chaves. não significa automaticamente assinado, ou credencial segura. A confiança surge da combinação entre estrutura válida, operação criptográfica correta, chave vinculada a um issuer permitido e validação semântica do perfil.

protege integridade e origem, mas mantém o legível. protege confidencialidade por criptografia autenticada e separa , responsável pela , de , responsável pelo conteúdo. aninhados podem combinar propriedades, mas aumentam complexidade e precisam de perfil claro.

e rotação fazem parte do runtime. Publicação antecipada, controlado, sobreposição e retirada planejada evitam indisponibilidade. é apenas uma dica dentro do issuer; e chaves fornecidas pelo próprio não devem criar confiança.

A 8725 orienta allowlists, validações mutuamente exclusivas, tipagem explícita e proteção contra confusão. A 9864 atualiza o tratamento de algoritmos totalmente especificados, e o registro continua sendo a referência operacional para nomes e status.

Checklist de projeto e operação

  • Existe um perfil documentado para cada tipo de aceito?
  • Issuer, audience, e algoritmos são definidos por configuração confiável?
  • A validação usa chave do issuer correto e não um global por ?
  • possui , limites, refresh coalescido e rotação testada?
  • Chaves privadas ficam em , ou cofre com auditoria?
  • Algoritmos são compatíveis com kty, use e key_ops?
  • temporais usam UTC, relógio sincronizado e tolerância limitada?
  • , , client assertions e logout usam validadores separados?
  • jku, x5u, e recebem tratamento seguro?
  • mascaram Authorization e não armazenam completos?
  • Testes negativos cobrem confusão de tipo, audience, algoritmo e rotação?
  • Existe procedimento de comprometimento e retirada emergencial de chave?

Exercícios de revisão

  • Explique por que um decodificado com sucesso ainda não é confiável.
  • Descreva a diferença entre , e usando um exemplo de .
  • Calcule quais componentes podem emitir quando HS256 é compartilhado entre cinco .
  • Proponha uma sequência de rotação para com validade de 20 minutos e de 10 minutos.
  • Explique por que não pode identificar uma chave globalmente.
  • Diferencie e em uma com -OAEP-256 e A256GCM.
  • Descreva como ajuda a impedir uso de como .
  • Explique o risco de seguir jku informado pelo .
  • Compare localmente validado e opaco com introspecção.
  • Defina quais informações podem ser registradas em sem copiar a credencial.

Glossário

Tabela 13 - Vocabulário essencial do capítulo.
TermoDefinição
AADAdditional Authenticated Data; dados autenticados sem serem cifrados.
algAlgoritmo de assinatura, MAC ou gerenciamento de chave.
Base64urlCodificação de bytes segura para URLs, sem confidencialidade.
CEKContent Encryption Key usada para cifrar o conteúdo em JWE.
claims setObjeto JSON contendo afirmações transportadas pelo JWT.
critLista de parâmetros críticos que o consumidor deve compreender.
ctyTipo do conteúdo protegido, útil em objetos aninhados.
encAlgoritmo de criptografia autenticada do conteúdo JWE.
JWAJSON Web Algorithms; identificadores e parâmetros criptográficos.
JWEJSON Web Encryption; estrutura de criptografia autenticada.
JWKJSON Web Key; representação JSON de uma chave.
JWKSJSON Web Key Set; conjunto de JWKs.
JWSJSON Web Signature; assinatura digital ou MAC sobre bytes.
JWTJSON Web Token; conjunto de claims protegido por JWS ou JWE.
kidKey ID; dica de seleção de chave dentro de um contexto.
Nested JWTJWT protegido em múltiplas camadas, como JWS dentro de JWE.
thumbprintDigest derivado de chave ou certificado para identificação.
typTipo de objeto declarado para processamento da aplicação.

Anexo A - Matriz de decisão

Tabela 14 - A arquitetura depende do requisito, não apenas da preferência por JWT.
NecessidadeEstratégia inicialControles essenciais
API valida localmenteJWS assimétrico e JWKS.Issuer, audience, typ, allowlist, cache e rotação.
Revogação imediataToken opaco ou introspecção.Disponibilidade do AS, cache curto e autenticação do RS.
Claims confidenciaisJWE ou referência opaca.Minimização, alg/enc, chave de destinatário e logging.
Vários validadoresAssinatura assimétrica.Privada apenas no emissor e pública distribuída.
Prova de posseDPoP ou mTLS-bound token.cnf, prova por requisição, nonce e proxies confiáveis.
Múltiplos tipos de JWTValidadores separados e typ explícito.Regras mutuamente exclusivas e testes negativos.
Rotação frequenteJWKS com sobreposição planejada.Publicar antes, cache controlado e retirar depois.
Credencial seletivaSD-JWT conforme RFC 9901.Disclosures, key binding, privacidade e perfil específico.

Referências técnicas

  • . 7515 - Web Signature ( ). 2015.
  • . 7516 - Web Encryption ( ). 2015.
  • . 7517 - Web Key ( ). 2015.
  • . 7518 - Web Algorithms ( ). 2015.
  • . 7519 - Web ( ). 2015.
  • . 7638 - Web Key ( ) . 2015.
  • . 7797 - Unencoded Option. 2016.
  • . 7800 - Proof-of-Possession Key Semantics for . 2016.
  • . 8037 - CFRG Elliptic Curve Diffie-Hellman and Signatures in . 2017.
  • . 8725 / BCP 225 - Web Best Current Practices. 2020.
  • . 9068 - Profile for 2.0 . 2021.
  • . 9101 - 2.0 -Secured Authorization . 2021.
  • . 9278 - . 2022.
  • . 9701 - for Introspection. 2025.
  • . 9864 - Fully-Specified Algorithms for and COSE. 2025.
  • . 9901 - Selective Disclosure for Web . 2025.
  • . Object Signing and Encryption ( ) registries.
  • . Web registry.
  • Microsoft Learn. Azure Management validate- e validate-azure-ad- policies.
  • Axway Documentation. validation, signing and encryption filters.
  • . Web Cheat Sheet for Java e 2.0 Security Cheat Sheet.

Nota de atualização

Algoritmos, registros e perfis continuam evoluindo. Antes de implantar uma combinação, confirme o status atual no registro , as que atualizam a especificação e o suporte exato da biblioteca, do , do provedor de identidade e do .