繁體中文(台灣)
  • 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 error screenshot

當你直接訪問登入頁面(例如,https://your-app.com/sign-in),而不是通過應用程式預期的登入流程,這種情況可能會發生。

原因如下:

OIDC 流程的重要性

Logto 依賴 OpenID Connect (OIDC) 協議 進行安全驗證。當你通過正常應用程式流(例如,通常是點擊應用程式中的登入按鈕)登入時,應用程式會與 Logto 的 OIDC 伺服器進行通信。這種通信稱為「授權請求」,非常重要,因為它首先對呼叫者進行了各種驗證,然後在你的瀏覽器和伺服器(由 Cookie 管理)之間建立了一個安全會話。

問題出在用戶直接導航到「/sign-in」頁面時,這繞過了應用程式內部的邏輯,未觸發 OIDC 授權請求。因此,伺服器無法識別你的瀏覽器有有效的會話,導致 404 錯誤。

解決方案

主要有兩種方法可以避免這個問題:

總是使用應用程式的登入按鈕

不要直接訪問「/sign-in」頁面,而是遵循應用程式提供的預定登入流程。當你在應用程式中點擊「Sign in」按鈕時,它會啟動正確的 OIDC 授權請求並建立必要的會話。

自動重定向用戶

如果你的 Logto 實例中只有一個應用程式,你可以嘗試實施邏輯,自動攔截用戶在沒有有效會話的情況下訪問「/sign-in」頁面的嘗試,並將他們重定向回顯示登入按鈕的主頁。由於 Logto 的「Omni-sign-in」性質,這無法由 Logto 完成,因為多個應用程式可以共用相同的身份驗證系統,當這種頁面請求進來時,Logto 不知道應該重定向到哪個應用程式。

關於體驗改善的額外思考

我們正在嘗試改善用戶體驗,至少在「/unknown-session」頁面上添加幫助信息,解釋 404 的原因並讓用戶知道該怎麼做,而不是感到困惑和無從下手。

我們也可能考慮實施其他安全措施以緩解這個問題,例如當為當前 Logto 實例檢測到只有一個應用程式時,自動重定向到「Sign-out redirect URI」(通常是應用程式的主頁),或在這種情況下顯示自定義消息的額外配置。

結論

在「/sign-in」頁面出現的 404 not found(無效會話)錯誤通常是由於直接訪問登入頁面 URL,這繞過了應用程式正常的登入流程,未能觸發授權請求,因此沒有建立有效的會話(由 Cookie 管理)。

通過理解這個流程及其重要性,你可以避免錯誤,並享受與 Logto 整合應用程式的無縫登入體驗。

如果你想分享你的想法,請隨時與我們聯繫。