Postmortem: mudança inesperada de `iss` em JWT
Relatório de incidente para a mudança inesperada de `iss` em JWT a 18-03-2024.
Resumo
A 18-03-2024, uma atualização que alterou o comportamento do emissor de JWT no Logto Cloud interrompeu os fluxos de autenticação para utilizadores com domínios personalizados e validação de iss
. A correção exigiu que esses utilizadores atualizassem a sua lógica de validação.
- Utilizadores afetados: utilizadores com domínios personalizados ativados e que realizam validação de
iss
. - Gravidade: Crítica, interrompendo a validação de
iss
dentro dos fluxos de autenticação.
Causa raiz
A atualização alterou o campo iss
para corresponder ao domínio solicitado, interrompendo validações existentes que esperavam o emissor padrão anterior.
Cronologia
- 18-03-2024 10:00 (UTC): atualizações implementadas, alterando o comportamento de
iss
. - 18-03-2024 23:30 (UTC): primeiro relatório de utilizador recebido sobre o comportamento interrompido existente.
- 19-03-2024 12:00 (UTC): problema confirmado e início da investigação.
- 19-03-2024 14:00 (UTC): causa raiz e impacto identificados.
- 20-03-2024 20:00 (UTC): email preparado para os utilizadores afetados.
- 20-03-2024 06:00 (UTC): emails enviados a todos os utilizadores afetados.
Análise de impacto
Detalhes da atualização
O Logto Cloud suporta domínios personalizados para autenticação, os desenvolvedores que têm locatários com domínio personalizado ativado podem definir o ponto final para o domínio personalizado nos SDKs, então o usuário final usará este ponto final para iniciar o processo de autenticação e obter tokens. Alguns tokens estão na forma de JWT, que inclui um campo iss
indicando o emissor deste token. Anteriormente, mesmo quando um ponto final de domínio personalizado era usado para solicitar um token de acesso, o emissor ainda seria, por padrão, o nosso domínio padrão ([tenant-id].logto.app
).
Mas o domínio do emissor deve ser o mesmo que o ponto final solicitado. Então lançámos uma atualização para corrigir este problema, e agora o campo iss refletirá automaticamente o domínio usado no pedido.
Para aqueles que já estão usando um domínio personalizado para conceder tokens e implementaram a validação do campo iss no servidor de recursos, isso poderia ser uma alteração incompatível. A verificação de autenticação existente falhará devido à mudança do emissor. Para corrigir isso, os desenvolvedores precisam alterar o código de validação, substituindo o emissor esperado pelo novo com domínio personalizado.
Falhámos em considerar totalmente o impacto nas validações de iss
existentes, como resultado, esta atualização tornou-se uma mudança incompatível sem notificação prévia.
Solução
Notificámos os utilizadores afetados por email, aconselhando-os a atualizar a sua validação de iss
para corresponder ao domínio solicitado.
Reversões?
A mudança é uma correção necessária para o campo do emissor, e alguns usuários podem já ter se adaptado ao novo comportamento. Uma reversão causaria confusão e inconsistência.
Lições aprendidas
- As alterações de código que afetam a autenticação central devem ter aprovação pela equipa além das revisões regulares.
- Testes automáticos devem cobrir mais casos, especialmente em cenários específicos da nuvem.
Medidas corretivas e preventivas
- Adicionar testes de integração: Adicionar casos de teste para cobrir o cenário deste incidente.
- Projetos de monitorização de funcionalidades: Além do Logto Cloud, criar nossos próprios projetos paralelos e integrar profundamente com o Logto para detectar potenciais problemas antes dos lançamentos.