Ferramentas de desenvolvedor · Decodificador JWT
JWT exp, iat e nbf: NumericDate é segundos, não milissegundos
· Como funciona
jwt carimbos de data/hora depuração
JavaScript fornece milissegundos e JWT deseja segundos, então os carimbos de data e hora dão errado por um fator de mil. Esta postagem explica NumericDate e como ler as três afirmações de tempo corretamente.
Tokens que nunca expiram ou expiram antes de chegar – os dois sintomas de um erro de unidade
Um erro de fator de mil produz sintomas dramáticos. Fornecer JavaScript milissegundos onde um produtor de token espera segundos de época pode atrasar o vencimento em milhares de anos. Dividir um valor de segundos novamente pode colocá-lo próximo de 1970, fazendo com que um token recém-emitido pareça expirado antes de sua primeira solicitação legítima.
Um decodificador ajuda a expor a escala mostrando a declaração numérica ao lado de uma leitura ISO. Essa exibição é apenas de diagnóstico. Um invasor pode gravar qualquer número `exp`, `iat` ou `nbf` em uma carga útil não assinada ou forjada, de modo que o horário do relógio convertido tenha autoridade somente após a assinatura e validação da política em outro lugar.
NumericDate em RFC 7519 — segundos desde a época Unix, como um número JSON, com frações permitidas, mas raramente usadas
As declarações de tempo JWT usam uma representação NumericDate: um número JSON contando segundos a partir da época Unix. Os números fracionários podem representar posições de subsegundos porque a implementação multiplica o valor por 1,000 antes de construir uma Data. Ele não arredonda primeiro um número finito válido para um número inteiro.
ToolAcre reconhece `exp`, `nbf`, `iat`, `auth_time` e `updated_at` como campos em formato de tempo para exibição. Apenas os três primeiros estão entre as descrições de reivindicações registradas. Os resultados de data não numéricos, infinitos ou inválidos são omitidos em vez de renderizados como tempos significativos, evitando que uma string como “em breve” seja mascarada como um carimbo de data/hora.
Date.now() é milissegundos – o hábito JavaScript que produz expirações em um futuro distante
`Date.now()` retorna milissegundos, enquanto um valor NumericDate é expresso em segundos. Um produtor que deriva uma afirmação do relógio do navegador necessita, portanto, de uma conversão de escala explícita, normalmente dividindo por 1,000 antes de aplicar a sua própria política de arredondamento. O caminho de leitura ToolAcre realiza a multiplicação inversa apenas para exibição.
Mantenha a conversão de unidades visível na revisão do código. Um valor de treze dígitos em `exp` é um sinal de alerta útil, mas a contagem de dígitos não é uma verificação e não pode substituir o contrato do produtor. O decodificador tentará renderizar qualquer afirmação numérica finita que JavaScript Date possa representar; ele não reinterpreta silenciosamente milissegundos como segundos.
exp, nbf e iat – expira, não antes e emitido em, e como um verificador aplica cada um
`exp` indica o tempo após o qual um verificador não deve mais aceitar um token de acordo com sua política. `nbf` nomeia um limite antes do qual não deve ser aceito. `iat` registra um horário de emissão. ToolAcre rotula esses significados e compara apenas `exp` e `nbf` com o relógio de referência fornecido.
O estado retornado é `expired` quando a expiração decodificada é anterior a agora, `future` quando não antes é posterior a agora e `past` para as outras declarações de tempo exibidas. Esses rótulos são observações sobre aritmética de carga útil. Não são uma decisão de autenticação e não avaliam emissor, público, chave ou assinatura.
As diferenças de relógio e a margem de manobra pertencem ao verificador; este decodificador não define nenhum dos dois
O esboço perguntava quanta distorção do relógio é razoável, mas nem a configuração do decodificador JWT nem a implementação definem uma margem de manobra. Esse número pertence ao verificador e aos seus requisitos de implantação. Inventar um padrão aqui transformaria um artigo de inspeção em uma política de segurança não documentada, portanto esta seção não fornece nenhum intencionalmente.
Se um serviço rejeitar um token próximo a um limite, compare o relógio do serviço, o relógio do emissor e a política do verificador configurada usando logs confiáveis. ToolAcre resolve reclamações contra a data atual do navegador sem janela de tolerância. Seu resultado pode, portanto, diferir de um servidor que aplica deliberadamente margem de manobra, mesmo quando ambos analisam o mesmo número.
Exemplo resolvido - convertendo um valor exp de amostra em um tempo legível por humanos e verificando-o em relação ao iat
Suponha que uma carga sintética contenha `iat: 1717243200` e `exp: 1717246800`. Multiplicar por 1,000 dá ISO instantes `2024-06-01T12:00:00.000Z` e `2024-06-01T13:00:00.000Z`. Subtrair os valores brutos de segundos produz um intervalo de uma hora sem misturar milissegundos do navegador no cálculo.
Essa aritmética descreve o que a carga diz. Não mostra que o emissor escolheu esses valores ou que uma hora é adequada para qualquer aplicação. ToolAcre imprime os números, gera UTC linhas e pode chamar a expiração de antiga em relação a hoje; um verificador deve autenticar de forma independente e aplicar suas próprias regras de aceitação.
O que isto não cobre – se um servidor específico aceitará o token, o que depende do seu relógio e margem de manobra; um decodificador mostra os valores, não o veredicto
Um decodificador não pode prever se um servidor específico aceitará o token. O servidor pode usar um relógio diferente, uma tolerância configurada, um esquema de declaração mais rigoroso ou verificações adicionais de emissor e público. A falha na assinatura por si só pode rejeitar um token cujo NumericDates exibido parece perfeitamente comum.
Por outro lado, uma expiração voltada para o futuro não torna válido um token não verificado. Trate o cronograma como uma forma de detectar prováveis erros de unidade e reunir evidências para depuração. O veredicto real pertence aos logs do servidor ou a um teste de verificação controlado com a chave e política esperadas, nunca no painel de decodificação.
Conclusão: leia as afirmações, faça a aritmética - o decodificador ToolAcre JWT mostra exp, iat e nbf para que você mesmo possa verificar as unidades
Leia as declarações e execute a aritmética de escala deliberadamente: os segundos NumericDate tornam-se JavaScript milissegundos apenas no limite de data. ToolAcre torna essa multiplicação explícita na fonte e exibe o valor ISO resultante, ignorando tipos de tempo malformados em vez de adivinhar o que seus autores pretendiam.
Mantenha a distinção de segurança igualmente explícita. Uma exibição `exp` não é uma imposição de expiração, uma exibição `nbf` não é controle de admissão e `iat` não é prova de emissão. Depois de inspecionar um token descartável, use o verificador confiável para autenticá-lo e aplicar o relógio real e a política de reivindicação do serviço.