為什麼你可能會在登入你的 Logto 整合應用程式時看到 404
你是否曾在嘗試登入 Logto 整合應用程式時遇到 "404 Not Found" 錯誤?這篇博客文章解釋了為什麼會發生這種情況,以及你可以做些什麼來避免它。
背景
你是否曾嘗試登入一個使用 Logto 進行身份驗證的應用程式並遇到 "404 not found" 錯誤?你的最終用戶有報告過同樣的問題嗎?
當你直接訪問登入頁面(例如,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 整合應用程式的無縫登入體 驗。
如果你想分享你的想法,請隨時聯繫我們。