Compreender a importância da declaração de token "iat" e resolver o erro "Hora de emissão inválida"
Neste post, vamos explorar a importância da declaração "iat" no token de identificação e como resolver o erro "Hora de emissão inválida no token de identificação".
Compreender a importância da declaração de token "iat" e resolver o erro "Hora de emissão inválida"
Contexto
Na nossa comunidade, de tempos em tempos, ouvimos dos nossos utilizadores sobre este problema intrigante de "Hora de emissão inválida no token de identificação". Os nossos utilizadores queixam-se que "Funcionava ontem, mas de repente deixou de funcionar hoje" ou "Funciona neste computador, mas não noutro".
Neste post, vamos explorar por que este problema acontece no Logto e equipar-te com o know-how para resolvê-lo.
Introdução
No OAuth 2.0 e OpenID Connect (OIDC), os tokens de identificação desempenham um papel vital na transmissão segura de informações de identidade do utilizador entre as partes. Uma das declarações num token de identificação é chamada "iat" (hora de emissão), representando o timestamp em que o token de identificação foi emitido pelo servidor de autorização.
Então, por que a declaração "iat" é importante?
- Frescura e expiração do token: A declaração "iat" fornece uma peça crucial de informação para avaliar a frescura de um token de identificação. Comparando o timestamp "iat" com a hora atual, as partes que confiam podem determinar quão recentemente o token foi emitido. Esta informação é valiosa para aplicações que precisam assegurar o uso de informações de identidade atualizadas.
- Mitigação de ataques de repetição: A declaração "iat" desempenha um papel vital na mitigação de ataques de repetição. Num ataque de repetição, um adversário tenta reutilizar um token previamente intercetado. A declaração "iat" ajuda a detectar tais ataques permitindo que a parte que confia defina uma janela de tolerância para a idade do token. Tokens fora desta janela podem ser considerados inválidos.
- Imposição de políticas de uso de token: As aplicações geralmente impõem políticas sobre a idade máxima permitida de um token de identificação por motivos de segurança. A declaração "iat" permite que as partes que confiam imponham estas políticas, garantindo que os tokens sejam consumidos dentro de um prazo especificado. Isto ajuda a minimizar o risco associado ao uso de tokens obsoletos.
- Suporte para revogação de tokens: Em alguns cenários, um servidor de autorização pode precisar revogar tokens emitidos. A declaração "iat" é instrumental nos processos de revogação de tokens, fornecendo um timestamp claro de quando o token foi emitido. Isto simplifica a identificação e revogação de tokens específicos com base na sua hora de emissão.
Práticas recomendadas para lidar com a declaração "iat"
- Validar a declaração "iat": As partes que confiam devem sempre validar a declaração "iat" para garantir que ela se enquadre num intervalo aceitável. Este intervalo pode variar dependendo dos requisitos de segurança específicos da aplicação.
- Considerar a diferença de relógio: Permitir um certo grau de diferença de relógio ao comparar o timestamp "iat" com a hora atual. A diferença de relógio considera quaisquer potenciais diferenças de tempo entre o servidor de autorização e a parte que confia.
- Definir políticas de expiração de token: Aproveitar a declaração "iat" em conjunto com a declaração "exp" (hora de expiração) para impor políticas abrangentes de uso de token, reforçando a postura geral de segurança da aplicação.
Resolução de problemas
Agora, a causa raiz do notório erro "Hora de emissão inválida" está quase clara.
Para mitigar ataques de repetição e também considerar a diferença de relógio, o Logto anteriormente estabelecia uma janela de tolerância de 60 segundos para os tokens de identificação. Qualquer parte que confie que tenha a diferença de tempo maior que 60 segundos do tempo mundial é considerada potencialmente em risco e falhará na validação do token de identificação. Assim, o erro "Token inválido na hora".
No entanto, no mundo real, a diferença de relógio acontece, às vezes o teu computador falha ao conectar-se ao servidor de tempo mundial para sincronizar a hora do computador. Às vezes, o servidor de autorização está fora de sincronia. Às vezes, ainda pior, ambos estão fora de sincronia.
Além disso, em cenários de SSO, as diferenças de tempo entre vários clientes e o fornecedor de SSO podem ser ainda maiores.
Solução
Para mitigar a dor e também considerar medidas de segurança, o Logto agora aumentou a tolerância do iat de 60 segundos para 5 minutos para autenticações não-SSO e 10 minutos para cenários de SSO.
Enquanto isso, podes verificar se a hora do teu computador está sincronizada com o mundo usando este site de ferramenta útil: https://time.is Sincroniza a tua hora manualmente ou muda para outro servidor de tempo, para garantir que a diferença de tempo está sempre dentro da nossa janela de tolerância.
Conclusão
A declaração "iat" em tokens de identificação é um elemento crucial para reforçar a segurança da gestão de identidade e acesso em aplicações modernas. Incorporar práticas recomendadas para lidar com a declaração "iat" assegura um processo de autenticação robusto e seguro.
Também garante que a hora do teu computador esteja sempre sincronizada com o servidor de tempo mundial.