1. 題目與使用場景
你維護一個被多個商戶網站嵌入的客服元件。元件需要記住每個商戶下的訪客工作階段,但不能把同一使用者在不同頂級網站的身分串聯。瀏覽器可能按頂級網站和第三方來源隔離 cookie、localStorage、快取和網路狀態。
2. 面試官考察點
- 是否能準確區分「第三方來源相同」和「儲存分區相同」。
- 是否理解 CHIPS 的適用範圍、屬性要求和資料隔離語義。
- 是否能為需要跨站未分區狀態的場景設計明確授權和降級。
- 是否把隱私目標、可用性、登入體驗和相容性放在同一決策框架中。
3. 回答前需要釐清的問題
- 元件需要跨頂級網站共享什麼,是否真的需要共享身分?
- 每個網站是否有自己的租戶、使用者和工作階段邊界?
- 是否允許使用者點擊一次完成授權,還是必須無互動載入?
- 支援哪些瀏覽器和嵌入方式:iframe、彈窗還是頂級跳轉?
4. 30 秒回答框架
用「資料邊界—預設方案—授權例外—降級—驗證」回答:
我先把工作階段鍵限定為頂級網站與元件來源的組合,預設使用帶有 Partitioned 屬性的安全 cookie,讓每個商戶擁有獨立工作階段。需要跨站登入時,改用頂級網站跳轉完成一次明確授權,再把短期一次性憑證傳回元件;若瀏覽器不支援目標能力,就退回無狀態模式並提示使用者登入。最後用不同頂級網站、清除網站資料和拒絕授權的測試矩陣驗證不會串號。
5. 分步驟深入解答
第一步:定義分區鍵與資料分類
Google Privacy Sandbox 將第三方儲存和通訊按分區隔離;MDN 將這種狀態隔離描述為降低跨站追蹤能力的瀏覽器策略。先把資料分成三類:僅當前商戶需要的工作階段、可公開快取的靜態資源、確實需要跨站身分的帳戶狀態。第一類不應繞過分區。
第二步:用 CHIPS 保存每站點工作階段
CHIPS 允許第三方 cookie 選擇分區儲存。回應應使用 Partitioned; Secure,並符合瀏覽器對 cookie 的其他安全要求。這樣,同一元件來源在商戶 A 和商戶 B 中拿到不同 cookie 罐,客服上下文不會自然跨站合併。CHIPS 解決的是「每個頂級網站各自保存狀態」,不是「跨站共享登入」。
第三步:為跨站身分設計明確授權
如果業務真的需要同一帳戶在多個網站可見,使用頂級網站跳轉或 Storage Access API 作為例外路徑。Storage Access API 讓第三方內容請求存取通常不可見的未分區狀態;產品應解釋用途、在合適時機請求,並準備拒絕後的替代體驗。授權結果應短期、可撤銷且綁定請求的頂級網站。
第四步:建立相容與隱私驗證矩陣
測試至少覆蓋:支援 CHIPS 的瀏覽器、不支援分區 cookie 的瀏覽器、拒絕儲存存取、使用者清除網站資料、多個頂級網站同時開啟,以及 iframe 被替換或導覽後重新載入。斷言包括 cookie 是否串站、工作階段是否可恢復、授權是否重複提示和無狀態模式是否仍能完成核心動作。
6. 高品質示範回答
我會先問清楚客服元件是否真的需要跨商戶識別同一使用者。預設答案是不需要:每個商戶的工作階段應該獨立,跨站串聯會帶來隱私和合規風險。
>
實作上,我讓元件服務端設定 Partitioned; Secure cookie。瀏覽器會按頂級網站和元件來源形成獨立儲存分區,所以使用者在商戶 A 的工作階段不會出現在商戶 B。靜態腳本和圖片可以走普通快取,但不把身分放進可跨站讀取的共享狀態。
>
對確實需要統一帳戶的場景,我提供「登入」按鈕,點擊後跳到帳戶頂級頁面完成驗證,再用短期一次性 code 回到原商戶。若瀏覽器支援 Storage Access API,也可以在使用者操作後請求未分區狀態;使用者拒絕或瀏覽器不支援時,元件退回每站點匿名工作階段和頂級登入。驗收時我會用兩個頂級網站、清除單站點資料和拒絕授權的組合測試,確認不會串號、不會無限重複彈授權,並記錄分區命中率與登入失敗率。
7. 常見錯誤
- 把 CHIPS 當成跨站共享 cookie,忽略它的核心語義是分區。
- 把所有狀態都改成未分區存取,擴大追蹤面和故障面。
- 只討論 Chrome,不驗證 Firefox、Safari 或能力偵測失敗路徑。
- 在 iframe 載入時靜默請求授權,沒有使用者動作、解釋和拒絕後的替代方案。
- 用長效 token 直接拼在回跳 URL 中,造成日誌、歷史記錄或 referrer 洩露。
8. 追問及應對
追問一:為什麼不把使用者 ID 放進頂級網站的 URL?
URL 可能進入日誌、歷史記錄、分析系統和 referrer。應使用短期一次性 code,並在服務端交換為受約束的工作階段。
追問二:CHIPS cookie 何時會讓使用者「看起來登出了」?
使用者首次進入新的頂級網站時,該網站擁有新的分區 cookie;這屬於設計上的隔離。產品應提供清晰的頂級登入流程,而不是嘗試讀取其他網站的 cookie。
追問三:Storage Access API 被拒絕時怎樣維持核心功能?
把跨站身分設為增強能力,匿名客服、說明文件和本地商戶工作階段仍可運作;當使用者需要歷史帳戶資料時,再引導頂級登入。