跳至主要內容

自帶 UI(Bring your UI)

除了預設的 UI 客製化選項外,Logto 允許你自帶自己的 UI,完全取代內建的登入體驗介面。此功能讓你可以上傳包含自訂 UI 資產(HTML、CSS、JavaScript、圖片等)的 zip 檔,並將其託管於 Logto Cloud 伺服器上,作為租戶使用者的 登入體驗。

備註:

此功能要求你的自訂 UI 必須相容於單頁應用程式(SPA, Single Page Application),並建議始終使用正式環境(production build)版本以獲得最佳效能。

在 Logto Console 體驗自訂 UI 功能​

使用官方專案快速開始​

最快建立自訂登入 UI 的方式是複製 Logto experience 專案。這是 Logto 內建的登入體驗 UI,涵蓋所有功能並遵循 Logto 最佳實踐。你可以根據需求進行自訂。

檢出程式碼後,只需執行以下指令來建置專案:

pnpm install && pnpm build
備註:

整個 Logto 專案為 pnpm monorepo。若你想單獨執行 experience 套件(不使用 pnpm),請將 package.json 中的 workspace: 依賴改為具體版本號(如 ^1.0.0)。

建置完成後,所有編譯後的資產會在 dist 目錄下。請將 dist 目錄壓縮成 ZIP 檔,稍後即可上傳至 Logto Cloud。

自訂 UI 資產要求​

上傳自訂 UI 資產前,請確保符合以下要求:

  • 上傳資產需打包為單一 zip 檔。
  • zip 檔根目錄需包含 index.html 檔案。
  • zip 檔大小不得超過 20MB。
  • zip 檔內單一檔案不得超過 10MB。
  • zip 檔內檔案總數不得超過 200 個。

上傳自訂 UI 資產​

備註:

在正式環境使用此功能時請謹慎,因為會立即影響使用者的登入體驗。

  1. 前往 Console > 登入與帳號 > 品牌設定 > 自帶 UI(Bring your UI)。
  2. 點擊選擇或拖曳你在前一步建立的 zip 檔,系統會自動開始上傳。
  3. 上傳完成後,儲存變更,你的自訂 UI 會立即生效。
  4. 使用自訂登入 UI 時,「登入預覽」視窗將會停用。不過,你仍可點擊「即時預覽」按鈕,在新分頁測試自訂登入頁面。

設定自訂 CSP 來源​

Logto 會對自訂 UI 頁面套用內容安全政策(CSP, Content Security Policy)標頭。若你的自訂 UI 需載入第三方腳本或連接外部服務,請在 Console > 登入與帳號 > 品牌設定 > 自帶 UI 中新增額外來源。

你可以設定:

  • script-src:允許 JavaScript 模組或腳本來源,例如 CAPTCHA、分析、標籤管理服務。
  • connect-src:允許 fetch、XMLHttpRequest、EventSource 及 WebSocket 連線的網路端點。

範例:

{
"scriptSrc": ["https://scripts.example.com"],
"connectSrc": ["https://api.example.com", "wss://events.example.com"]
}

兩者皆請使用 HTTPS 來源。connect-src 也接受 WebSocket 連線的 wss:// 來源。Logto 僅在你的自訂 UI 資產啟用時,才會將這些來源附加到現有安全政策。

設定 Cross-Origin-Opener-Policy 標頭​

預設情況下,Logto 不會傳送 Cross-Origin-Opener-Policy(COOP)標頭,因此開啟登入頁的應用程式 popup 可透過 window.opener 與其溝通。若你的應用程式不會透過 popup 登入,可以將自訂登入 UI 與其他瀏覽器視窗隔離。在 Console > 登入與帳號 > 品牌設定 > 自帶 UI 下選擇 Cross-Origin-Opener-Policy 的政策:

選項傳送的標頭效果
未設定(無標頭)無預設值。所有基於 popup 的整合可正常運作。
same-origin-allow-popupsCross-Origin-Opener-Policy: same-origin-allow-popups切斷開啟登入頁的視窗。自訂 UI 開啟的 popup 只要停留在其他網站仍保有 window.opener。
same-originCross-Origin-Opener-Policy: same-origin也會切斷自訂 UI 開啟的 popup。

你也可以透過 更新登入體驗 Management API 設定 crossOriginOpenerPolicy 欄位。可接受 unsafe-none(預設,不傳送標頭)、same-origin-allow-popups 與 same-origin。

注意:

選擇政策前,請檢查你的應用程式與自訂 UI 如何使用 popup:

  • 會在 popup 開啟登入頁並依賴 window.opener(例如透過 postMessage 傳遞結果)的應用程式,在啟用任一政策後將無法運作。若有此類應用,請維持預設值,或先改為導向式登入流程。
  • 自訂 UI 開啟的 popup 回到自訂 UI(如社交登入 callback 頁)時會失去 window.opener。若 popup 停留在其他網站並從那裡傳送結果(如第三方登入 popup),在 same-origin-allow-popups 下仍可運作。若選 same-origin,popup 一開啟即失去 window.opener。

如需設定,建議優先選擇 same-origin-allow-popups。

Logto 僅在自訂 UI 資產被服務時傳送該標頭。內建登入頁、/oidc/* 頁面與帳號中心(/account)皆不會傳送 COOP 標頭,因此安全掃描工具可能仍會在這些頁面報告缺失。

開發你的自訂 UI​

與 Experience API 互動​

你的自訂 UI 需與 Experience API 互動,以執行登入、註冊、重設密碼、綁定社交帳號、啟用 MFA 等多種操作。為深入瞭解使用者流程與實作細節,建議參考我們的 Experience API 設計 RFC,內含完整技術規格與範例。

你也需要透過 sign-in Experience API endpoint 取得其他登入體驗設定,如品牌色、公司 logo、favicon、密碼政策、本地化語言字串,甚至自訂 CSS。

啟用 CAPTCHA 時的處理方式​

Logto 內建登入體驗會自動處理 CAPTCHA。若你的租戶使用自帶 UI 並啟用 CAPTCHA 機器人防護,你的自訂 UI 必須在呼叫 PUT /api/experience 前完成前端 CAPTCHA 整合。

請將驗證服務回傳的 token 作為 captchaToken,放入 PUT /api/experience 請求主體。詳情請參閱各服務提供者指南:

範例專案​

我們提供多個範例專案,協助你快速瞭解並開始實作自訂 UI。詳情請參閱 Logto Experience project GitHub 倉庫。

此外,我們將持續推出更多簡化且情境導向的範例專案,涵蓋最常見的使用情境,敬請期待未來更新!

本地開發與除錯​

針對本地開發與除錯,我們提供 Logto Tunnel CLI 工具,可:

  • 將本機 Experience API 請求代理到 Logto Cloud 端點。
  • 在本地測試你的自訂 UI 實作。

這讓你能在上傳至 Logto Cloud 前,於本地測試與除錯自訂 UI。

請參閱 本地除錯與測試自訂 UI 以取得更多資訊。

使用 CLI 上傳自訂 UI 資產​

除了透過 Console 上傳外,你也可以使用 Logto CLI 上傳自訂 UI 資產,特別適合自動化部署流程。

詳情請參閱 使用 CLI 上傳自訂 UI 資產。

還原為 Logto 內建登入體驗​

若你希望還原為 Logto 內建登入體驗,只需點擊自帶 UI 卡片上的刪除按鈕。儲存變更後,登入體驗 UI 即會回復為 Logto 預設樣式。

RFCS:Experience API

Experience samples 將自訂登入 UI 帶到 Logto Cloud