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

這種情況發生在你直接訪問登入頁面(例如:https://your-app.com/sign-in),而沒有經過應用內預期的登入流程時。

原因如下:

OIDC 流程的重要性

Logto 依賴 OpenID Connect (OIDC) 協定 來進行安全驗證。當你從正常的應用流程登入時(例如通常點擊應用內的登入按鈕),應用會向 Logto 的 OIDC 伺服器發起一次通信。這個稱為「授權請求」的通信非常重要,因為它首先會對請求者進行各種驗證,然後在你的瀏覽器與伺服器之間建立一個安全的 session(由 cookie 管理)。

問題出現在使用者直接訪問「/sign-in」頁面時,這會繞過應用中觸發 OIDC 授權請求的內部邏輯。因此,伺服器無法識別你的瀏覽器有有效的 session,結果就導致 404 錯誤。

解決方法

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

一定要使用應用的登入按鈕

不要直接訪問「/sign-in」頁面,而要遵循應用提供的預期登入流程。當你在應用內點擊「登入」按鈕時,會正確發起 OIDC 的授權請求並建立必要的 session。

自動重新導向使用者

如果你的 Logto 實例只含有單一個應用,你可以考慮實作邏輯,自動攔截使用者在沒有有效 session 下訪問「/sign-in」頁面的行為,並將他們導向主頁面(顯示登入按鈕的頁面)。

為此,Logto 推出了「Unknown session redirect URL」設定。當你設置這個 URL 後,Logto 會自動將使用者導向你指定的頁面,而不再顯示 404 錯誤。例如,你可以把他們導向你應用的首頁或自訂登入畫面。被導向後,你的前端應用應主動發起全新的登入流程。

設定方式:進入 Logto Console,在 Logto Cloud > 登入體驗 > 註冊和登入 > 進階選項 裡面,輸入你的預設導向網址(fallback URL)。

舉例來說,Logto Cloud 預設將這裡設為 https://cloud.logto.io/。設好後,沒有 session 的使用者訪問 /sign-in,就會被送去這個網址重新開始驗證。

進一步提升體驗的想法

我們正嘗試提升用戶體驗,至少會在「/unknown-session」頁面添加有用訊息,解釋 404 的原因並讓使用者知道該怎麼做,不會感到困惑。例如,Logto 支援在登入錯誤頁面自訂支援 email 和網站地址,遇到錯誤的用戶就能看到你的聯絡方式並主動求助。

我們也在考慮引入其他更安全的措施,比如:如果該 Logto 實例僅有單一應用時,自動導向「Sign-out redirect URI」(通常是應用首頁),或可讓你藉由額外設定來顯示專屬訊息。

結論

「/sign-in」頁面上出現的 404 not found(session 無效)錯誤,通常是因為你直接存取登入頁的網址,跳過了正常會觸發授權請求的應用登入流程,進而未建立任何有效 session(cookie 管理)。

了解這個流程及其重要性後,你就可以避免這類錯誤,順利享用 Logto 集成應用的無縫登入體驗。

如果你有任何想法,歡迎聯絡我們一起討論!