Por que pode acontecer ver um 404 ao iniciares sessão na tua aplicação integrada com o Logto
Já alguma vez te deparaste com um erro "404 Não Encontrado" quando tentaste iniciar sessão numa aplicação integrada com o Logto? Este post no blog explica por que isto acontece e o que podes fazer para evitá-lo.
Contexto
Já alguma vez tentaste iniciar sessão numa aplicação que usa o Logto para autenticação e encontraste um erro "404 não encontrado"? Algum dos teus utilizadores finais reportou o mesmo problema?
Isto pode acontecer quando acedes diretamente à página de início de sessão (por exemplo, https://tua-aplicacao.com/sign-in
) sem passar pelo fluxo de início de sessão pretendido da tua aplicação.
Eis por que acontece:
A importância do fluxo OIDC
O Logto baseia-se no protocolo OpenID Connect (OIDC) para autenticação segura. Quando inicias sessão através do fluxo normal da aplicação (e.g., normalmente ao clicares num botão de início de sessão da tua aplicação), a aplicação inicia uma comunicação com o servidor OIDC do Logto. Esta comunicação, chamada de "pedido de autorização", é importante porque faz várias validações contra o chamador primeiro, e depois estabelece uma sessão segura entre o teu navegador e o servidor (gerida por cookies).
O problema surge quando os utilizadores navegam diretamente para a página "/sign-in", pois isto passa por cima da lógica interna da aplicação que desencadeia o pedido de autorização OIDC. Consequentemente, o servidor não reconhece o teu navegador como tendo uma sessão válida, o que leva então ao erro 404.
A solução
Há duas maneiras principais de evitar este problema:
Usa sempre o botão de início de sessão da aplicação
Em vez de acederes diretamente à página "/sign-in", segue o fluxo de login pretendido pela aplicação. Ao clicares no botão "Iniciar sessão" dentro da aplicação, é iniciado o pedido de autorização OIDC próprio, e é estabelecida a sessão necessária.
Redirecionar automaticamente os utilizadores
Se só tiveres uma aplicação na tua instância do Logto, podes tentar implementar uma lógica para automaticamente interceptar tentativas de utilizadores de acederem à página "/sign-in" sem uma sessão válida, e redirecioná-los de volta para a tua página principal onde é exibido um botão de início de sessão. Isto não pode ser feito pelo Logto devido à sua natureza de "Omni-sign-in", pois múltiplas aplicações podem partilhar o mesmo sistema de autenticação, e portanto quando tal pedido de página chega, o Logto não sabe para qual aplicação deve redirecionar.
Reflexões adicionais sobre a melhoria da experiência
Estamos a tentar melhorar a experiência do utilizador, pelo menos adicionando mensagens úteis na página "/unknown-session", explicando a razão para o 404 e deixando os utilizadores saberem o que fazer em vez de ficarem confusos e sem saber o que fazer.
Podemos também considerar a implementação de outras medidas de segurança para mitigar o problema, como redirecionar automaticamente para o "URI de redirecionamento de saída" (geralmente a página principal da aplicação) quando houver apenas uma aplicação detetada para a instância atual do Logto, ou adicionar configuração adicional para mostrar uma mensagem personalizada nesse caso.
Conclusão
O erro 404 não encontrado (sessão inválida) na página "/sign-in" é geralmente causado por aceder diretamente ao URL da página de início de sessão, o que ignora o fluxo de início de sessão normal da aplicação que desencadeia o pedido de autorização, e assim não é estabelecida uma sessão válida (gerida por cookies).
Ao entender este fluxo e a sua importância, podes evitar o erro e desfrutar de uma experiência de início de sessão sem problemas com a tua aplicação integrada com o Logto.
Por favor, não hesites em nos contactar se quiseres partilhar as tuas ideias.