繁體中文(香港)
  • 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 伺服器建立通信。這種通信稱為“授權請求”,非常重要,因為它首先對調用者進行各種驗證,然後在你的瀏覽器與伺服器之間建立安全會話(由 cookies 管理)。

當用戶直接導航到“/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,而繞過了觸發授權請求的正常應用程式登入流程,因此沒有建立有效會話(由 cookies 管理)。

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

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