Entendendo a importância da reivindicação de "iat" no token e solucionando o erro "Hora de emissão inválida"
Neste post, vamos explorar a importância da reivindicação "iat" no token de ID e como solucionar o erro "Hora de emissão inválida no token de ID".
Entendendo a importância da reivindicação “iat” no token e solucionando o erro “Hora de emissão inválida”
Contexto
Na nossa comunidade, de vez em quando, ouvimos de nossos usuários sobre este problema intrigante de “Hora de emissão inválida no token de ID”. Nossos usuários reclamam que “Estava funcionando ontem, mas de repente parou de funcionar hoje” ou “Funciona neste computador, mas não no outro”.
Neste post, vamos explorar por que esse problema acontece no Logto e armá-lo com o know-how para enfrentá-lo.
Introdução
No OAuth 2.0 e OpenID Connect (OIDC), os tokens de ID desempenham um papel vital na transmissão segura de informações de identidade do usuário entre as partes. Uma das reivindicações em um token de ID é chamada de "iat" (hora de emissão), representando o timestamp no qual o token de ID foi emitido pelo servidor de autorização.
Então por que a reivindicação “iat” é importante?
- Atualidade e expiração do token: A reivindicação "iat" fornece uma peça crucial de informação para avaliar a atualidade de um token de ID. Ao comparar o timestamp de "iat" com a hora atual, as partes dependentes podem determinar quão recentemente o token foi emitido. Essa informação é valiosa para aplicações que precisam garantir o uso de informações de identidade atualizadas.
- Mitigação de ataques de repetição: A reivindicação "iat" desempenha um papel vital na mitigação de ataques de repetição. Em um ataque de repetição, um adversário tenta reutilizar um token previamente interceptado. A reivindicação "iat" ajuda a detectar tais ataques permitindo que a parte dependente defina uma janela de tolerância para a idade do token. Tokens fora dessa janela podem ser considerados inválidos.
- Imposição de políticas de uso de tokens: Aplicações frequentemente impõem políticas sobre a idade máxima permitida de um token de ID por razões de segurança. A reivindicação "iat" permite que as partes dependentes imponham essas políticas, garantindo que os tokens sejam consumidos dentro de um período especificado. Isso ajuda a minimizar o risco associado ao uso de tokens obsoletos.
- Suporte à revogação de tokens: Em alguns cenários, um servidor de autorização pode precisar revogar tokens emitidos. A reivindicação "iat" é instrumental em processos de revogação de tokens ao fornecer um timestamp claro de quando o token foi emitido. Isso simplifica a identificação e revogação de tokens específicos com base no seu tempo de emissão.
Melhores práticas para lidar com a reivindicação “iat”
- Validar a reivindicação "iat": As partes dependentes devem sempre validar a reivindicação "iat" para garantir que ela esteja dentro de um intervalo aceitável. Este intervalo pode variar dependendo das exigências específicas de segurança da aplicação.
- Considerar o desvio de relógio: Permitir um certo grau de desvio de relógio ao comparar o timestamp de "iat" com a hora atual. O desvio de relógio leva em conta quaisquer potenciais diferenças de tempo entre o servidor de autorização e a parte dependente.
- Definir políticas de expiração de tokens: Aproveitar a reivindicação "iat" em conjunto com a reivindicação "exp" (tempo de expiração) para impor políticas abrangentes de uso de tokens, aprimorando a postura de segurança geral da aplicação.
Solução de problemas
Agora, a causa raiz do infame erro “Hora de emissão inválida” está quase clara.
Para mitigar ataques de repetição e também considerar o desvio de relógio, o Logto anteriormente definia uma janela de tolerância de 60 segundos para os tokens de ID. Qualquer parte dependente que tem a diferença de tempo maior que 60 segundos do tempo universal é considerada potencialmente em risco e falhará na validação do token de ID. Assim, o erro “Hora de emissão inválida”.
No entanto, no mundo real, o desvio de relógio acontece, às vezes seu computador falha em conectar ao servidor de tempo mundial para sincronizar o horário do computador. Às vezes, o servidor de autorização está fora de sincronia. Às vezes, pior ainda, 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 provedor de SSO podem ser ainda maiores.
Solução
Para mitigar a dor e também considerando medidas de segurança, o Logto agora aumentou a tolerância de iat de 60 segundos para 5 minutos para autenticações não SSO e 10 minutos para cenários de SSO.
Enquanto isso, você pode verificar se o tempo do seu computador está sincronizado com o mundo usando este site útil: https://time.is Sincronize seu tempo manualmente ou troque para outro servidor de tempo, para garantir que a diferença de tempo esteja sempre dentro da nossa janela de tolerância.
Conclusão
A reivindicação "iat" nos tokens de ID é um elemento crucial para aprimorar a segurança da gestão de identidade e acesso em aplicações modernas. Incorporar melhores práticas para lidar com a reivindicação "iat" garante um processo robusto e seguro de autenticação de identidade.
Também certifique-se de que o tempo do seu computador esteja sempre sincronizado com o servidor de tempo mundial.