繁體中文(香港)
  • 404-not-found
  • logto-unknown-session
  • authorization-code-flow

為什麼你在登入 Logto 整合應用程式時可能會見到 404?

你有沒有試過在登入一個整合了 Logto 的應用程式時遇到「404 Not Found」錯誤?這篇博客會解釋為什麼會發生這種情況以及你可以怎樣避免它。

Charles
Charles
Developer

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
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(用 cookies 管理)。

問題在於當用戶直接跳去「/sign-in」頁面時,這會繞過應用程式內部觸發 OIDC 授權請求的邏輯。因此,伺服器無法確認你的瀏覽器有有效的 Session,就會出現 404 錯誤。

解決方法

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

永遠使用應用程式的登入按鈕

不要直接進入「/sign-in」頁面,應該按照應用程式提供的登入流程。當你在應用程式內點擊「登入」按鈕,會正確發起 OIDC 授權請求,並建立所需的 Session。

自動重定向用戶

如果你的 Logto 實例只連接了一個應用程式,可以考慮加入邏輯,自動截取直接進入「/sign-in」頁而沒有有效 Session 的用戶,然後重定向回顯示登入按鈕的主頁。

為了解決這個問題,Logto 引入了「Unknown session redirect URL」設定。你只要設定這個 URL,Logto 就會自動把用戶重定向到指定的頁面,而不會顯示 404 錯誤。舉個例子,你可以把用戶導向應用程式首頁或自定的登入畫面。重定向之後,你的客戶端應用程式應重新啟動一個登入流程。

你可以在 Logto Console 的 Logto Cloud > 登入體驗 > 註冊和登入 > 進階選項 裡面設定這個後備 URL。

例如,Logto Cloud 就設定為 https://cloud.logto.io/。一旦設定好,沒有有效 Session 而進入 /sign-in 的用戶都會被導到這個 URL,重新開始登入。

關於體驗提升的額外思考

我們正努力改善用戶體驗,例如在「/unknown-session」頁面加入有用的提示訊息,解釋 404 的原因,讓用戶知道下一步要怎樣做,不致於一頭霧水。例如 Logto 支援在登入錯誤頁面顯示你設定的支援電郵和網站地址,用戶遇到問題時就能聯絡你求助。

我們也會考慮實現其他安全措施來減少這方面的問題,例如在只有一個應用時自動重定向到「Sign-out redirect URI」(通常是應用主頁),或者加入額外設定讓你在這些情況下顯示自定訊息。

總結

「/sign-in」頁面的 404 not found(無效 Session)錯誤,多數是因為直接存取登入頁 URL,繞過了會發起授權請求的正常登入流程,因此沒有建立有效的(用 cookies 管理的)Session。

明白這個流程及其重要性,就可以避開這個錯誤,享受流暢的 Logto 應用登入體驗。

如果你有想法,也歡迎隨時聯絡我們分享。