← SecurityX/CASP+: arquitetura e operação segura
11 / 15 · 65 MIN

Tokens e fronteiras de confiança

Valida o contexto de um token antes de usar as suas claims numa decisão de acesso.

Começar pelo contrato do recurso

Uma API fictícia de relatórios de fundos recebe um JWT assinado. A equipa confirma a assinatura e considera o pedido autorizado. Falta verificar para que recurso o token foi emitido, por quem, para que finalidade e durante que intervalo. O servidor de recursos precisa de uma política explícita, acordada com o emissor: algoritmos aceites, chaves associadas ao emissor, audience, tipo e claims exigidas. O formato genérico JWT não torna todas as claims obrigatórias. O perfil de access token do RFC 9068 exige mais informação, incluindo iss, exp, aud, sub, client_id, iat e jti. Documenta o perfil aplicado, sem assumir que qualquer sequência com três partes serve como credencial desta API.

Decodificar não autentica o conteúdo

O laboratório gera chaves RSA temporárias em memória e assina tokens sintéticos com RS256. Ler a parte de claims revela tenant e scope sem conhecer a chave privada: a codificação não oferece confidencialidade. Quando o exercício altera o tenant depois da assinatura, a verificação falha. Outra chave privada também não produz uma assinatura aceite pela chave pública fixada. Porém, um token corretamente assinado com audience diferente continua inadequado para o recurso. A verificação criptográfica e a validação de contexto respondem a perguntas distintas. Não coloques tokens reais em descodificadores públicos nem registes o bearer completo para facilitar diagnóstico; quem obtiver a credencial pode conseguir reutilizá-la enquanto os controlos a aceitarem.

Escolher confiança antes de ler indicações não fiáveis

O campo alg não deve permitir ao remetente escolher livremente a política criptográfica. O modelo aceita apenas RS256 e rejeita HS256 ou none, mesmo quando os restantes campos parecem corretos. Um kid identifica uma chave dentro do conjunto configurado; não cria confiança nessa chave. A fixture não segue URLs jku, não descarrega material remoto e rejeita extensões que não implementa. Em produção, a descoberta e atualização de chaves precisam de origens de confiança, limites e comportamento de falha definidos. Não uses um URL vindo do token como autorização para contactar qualquer destino. Para reduzir confusão entre ID tokens e access tokens, o exercício exige um tipo compatível com at+jwt, além das verificações de emissor e audience.

Tornar os limites temporais observáveis

O relógio da fixture é fixo e a tolerância é zero. No instante exp, o token já é rejeitado; no instante nbf, pode tornar-se válido. A ausência de exp e um valor exp em texto são rejeitados neste perfil. A política local acrescenta duração máxima de dez minutos e recusa emissão no futuro. Esses dois limites são escolhas didáticas, não requisitos universais de todos os JWT. Sistemas reais podem permitir pequena tolerância de relógio, mas precisam de justificar o valor e monitorizar sincronização. Aumentar tolerância indefinidamente para resolver um incidente prolonga exposição e pode esconder deriva. Regista relógio observado, categoria de falha e versão da política sem publicar a credencial.

Usar o ensaio para formular critérios de integração

Converte as verificações em critérios de aceitação: assinatura alterada, emissor errado, audience errada, tipo incompatível, expiração, chave desconhecida e claims em falta devem ter resultados definidos. Inclui casos válidos para evitar uma proteção que simplesmente bloqueia tudo. O código é um modelo limitado, não uma biblioteca JWT auditada nem uma implementação completa do perfil. Não cobre todos os casos de parsing, membros JSON duplicados, protocolos OAuth ou obtenção remota de chaves. Num projeto, usa componentes mantidos e revistos, confirma a configuração efetiva e repete os testes nos pontos de entrada relevantes. O valor do laboratório é tornar as fronteiras explícitas e verificáveis, sem transformar uma execução local numa aprovação da arquitetura de produção.

node content/labs/securityx-api-authorization/run.mjs --output /tmp/securityx-api.json
# Synthetic keys and claims only; inspect checks, not real bearer tokens.
NA PRÁTICA

Uma assinatura válida com aud destinado a outra API é rejeitada, tal como um token expirado no instante exato de exp.

Armadilhas comuns

Decodificação como validação; kid como confiança; ID token como access token; tolerância de relógio sem limite.

Tópicos relacionados: Fronteiras de confiança · Autorização de APIs · Revogação e operação

Leva esta ideia contigo

Uma assinatura válida é apenas uma parte do contrato de aceitação do token.

Criar conta

Referência: JWT Profile for OAuth 2.0 Access Tokens · CAS-005 / SecurityX V5; objectives 3.0; launched 2024-12-17

CompTIA® e CASP+ são marcas comerciais ou marcas registadas de CompTIA, Inc. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por CompTIA. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.