简体中文
  • 404-not-found
  • logto-unknown-session
  • authorization-code-flow

为什么在登录集成 Logto 的应用时会看到 404

当你尝试登录集成了 Logto 的应用时,是否遇到过“404 Not Found”错误?这篇博客文章解释了为什么会发生这种情况以及如何避免它。

Charles
Charles
Developer

背景

你是否尝试登录一个使用 Logto 进行身份验证的应用,并遇到了“404 not found”错误?你的终端用户是否报告过同样的问题?

Logto session not found 404 错误截图

当你直接访问登录页面(例如,https://your-app.com/sign-in),而没有通过应用程序的预期登录流程时,就可能会发生这种情况。

原因如下:

OIDC 流的重要性

Logto 依赖于 OpenID Connect (OIDC) 协议 来实现安全身份验证。当你通过正常的应用流程登录(例如,通常通过点击应用程序中的登录按钮),应用程序会与 Logto 的 OIDC 服务器进行通信。这种名为“授权请求”的通信 是重要的,因为它首先对调用者进行各种验证,然后在你的浏览器和服务器之间建立一个安全会话(由 cookie 管理)。

当用户直接导航到“/sign-in”页面时,会跳过触发 OIDC 授权请求的应用程序内部逻辑,因此服务器不承认你的浏览器拥有有效会话,这就导致了 404 错误。

解决方案

有两种主要的方法可以避免这个问题:

始终使用应用的登录按钮

请按照应用程序提供的登录流程,而不是直接访问“/sign-in”页面。点击应用内的“登录”按钮时,会发起正确的 OIDC 授权请求,从而建立必要的会话。

自动重定向用户

如果你的 Logto 实例中只有一个应用程序,你可以尝试实现逻辑,自动拦截未拥有有效会话而访问“/sign-in”页面的用户,并将他们重定向回显示登录按钮的主页面。由于 Logto 的“Omni-sign-in”特性,无法实现这种重定向,因为多个应用程序可以共享同一身份验证系统,当有此类页面请求时,Logto 不知道应该重定向到哪个应用程序。

关于改善体验的额外思考

我们正努力改进用户体验,至少在“/unknown-session”页面上添加帮助信息,解释造成 404 的原因,并让用户知道该怎么做,而不是感到困惑和无所适从。

我们还可能考虑实施其他安全措施来减轻问题,例如,当在当前 Logto 实例中只检测到一个应用时,自动重定向到 “登录重定向 URI”(通常是应用程序的主页),或者在这种情况下添加额外配置以显示自定义消息。

结论

“/sign-in”页面上的“404 not found”(无效会话)错误通常是由于直接访问登录页面 URL 导致的,这样会跳过触发授权请求的正常应用登录流程,因此未建立有效会话(由 cookie 管理)。

通过了解此流程及其重要性,你可以避免该错误,享受与 Logto 整合的应用程序的无缝登录体验。

欢迎随时与我们联系以分享你的想法。