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

为什么在登录集成了 Logto 的应用时可能会看到 404 错误

你是否在尝试登录集成了 Logto 的应用时遇到过 "404 Not Found" (未找到)错误?本文将解释为什么会出现这种情况,以及你该如何避免它。

Charles
Charles
Developer

不要在用户认证上浪费数周时间
使用 Logto 更快地发布安全应用。几分钟内集成用户认证,专注于您的核心产品。
立即开始
Product screenshot

背景

你是否曾尝试登录一个使用 Logto 进行身份验证的应用,并遇到了 "404 not found"(未找到)错误?你的终端用户是否也有过类似报告?

Logto 会话未找到 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 引入了“未知会话重定向 URL”设置。当你设置好该 URL 后,Logto 会自动将用户重定向到指定页面,而不是显示 404 错误。例如,你可以将用户重定向到你的应用首页或自定义登录界面。在重定向之后,你的客户端应用应该发起新的登录流程。

你可以前往 Logto 控制台的 Logto Cloud > 登录体验 > 注册和登录 > 高级选项 配置你的备用 URL。

例如,Logto Cloud 将其设置为 https://cloud.logto.io/。设置完成后,那些在没有有效会话的情况下访问 /sign-in 的用户将会被发送到该 URL 以重新开始认证。

关于提升体验的更多思考

我们也在尝试提升用户体验,例如,至少在 “/unknown-session” 页面上添加有用提示,向用户解释 404 的原因,并让用户清楚下一步该做什么,而不是感到困惑和无助。例如,Logto 支持为登录错误页面自定义支持邮箱和网站地址,用户遇到错误时会看到你的联系方式,可以主动寻求协助。

我们也会考虑实现其它安全措施以缓解问题,比如当当前 Logto 实例中只检测到一个应用时,自动重定向到 “Sign-out redirect URI”(通常为应用主页),或者添加额外配置以展示自定义信息。

总结

“/sign-in” 页面的 404 not found(无效会话)错误,通常是因为用户直接访问登录页面 URL,从而绕过了正常触发授权请求的应用登录流程,此时没有建立有效会话(cookie 管理)。

理解此流程及其重要性后,你可以避免该错误,享受与 Logto 集成应用的流畅登录体验。

如果你有想法,欢迎随时联系我们进行交流。