先界定第三方登入的用途

「使用第三方帳戶繼續」首先是帳戶政策,不只是加入一個登入按鈕。商戶應分清首次建立本地帳戶、登入已連結帳戶,以及在已登入狀態下新增連結三種操作。授權頁面成功返回,只代表技術流程有結果,並不自動證明應把哪位顧客的訂單、地址或偏好交給該身份。先寫清楚每種情況的處理方式,才讓開發人員設定回調地址。

OAuth 的核心用途是授權存取;若把流程用作登入,還要使用並驗證合適的身份聲明,例如 OpenID Connect。顯示名稱或電郵地址不能單獨當成永久身份證明,因為電郵可以變更、未經驗證,亦可能與現有帳戶重疊。選定身份協定後,應按其提供的發行者及穩定主體識別碼建立外部連結,本地顧客編號仍由商戶管理。客服需要有調查爭議的紀錄,但紀錄不應包含可重用的權杖。

先問顧客為何需要這項登入方式:是減少忘記密碼、配合合作夥伴身份,還是方便重複購買?若原本大部分交易可訪客結帳,強制第三方登入反而可能增加步驟。沒有該供應商帳戶的顧客仍應有可行路線;舊顧客改用新方法後如何找回既有訂單,也要先定案。這些是驗收問題,不能憑空當成轉換率改善證據。現有成效資料未能提供實測結果,因此不應聲稱某種登入方式更受歡迎。

採用合適的授權流程

對在瀏覽器執行的公開用戶端,RFC 10017 要求在取得存取權杖時使用授權碼流程及 PKCE。每次嘗試都要產生新的驗證字串,起始請求提交由它衍生的挑戰值,換取權杖時再提交原字串,讓授權碼與原來的用戶端流程互相對應。由伺服器持有憑證的機密用戶端處理方式不同,但 RFC 9700 同樣建議使用 PKCE。不要因為舊範例使用隱式流程,就直接照搬。

PKCE 挑戰方法應選 S256;RFC 9700 指出,它是目前不會在起始授權請求中暴露驗證字串的方法。驗收時要確認供應商在換取權杖的端點真正執行比對,不能只看應用程式有沒有傳參數。回調地址應與預先登記的地址逐字比對,標準只對原生應用程式 localhost 連接埠有指定例外。正式及測試環境只登記實際使用的回調地址,避免籠統通配設定令授權碼流向難以審核。

授權碼與權杖即使有效期有限,在有效期間仍屬敏感資料;不可放入分析事件、客服截圖、瀏覽紀錄或一般程式日誌。應在正確端點完成交換及驗證,再按商戶自己的規則建立本地已登入會話。供應商暫時故障時,畫面應清楚說明登入未完成,並在安全情況下保留顧客原本的結帳位置。任何外部回應失敗,都不能被系統誤當成本地登入成功。

把回調與原本嘗試綁定

安全的回調不只是頁面能正常載入。用戶端必須阻止偽造或替換的授權回應。RFC 9700 說明:已確認供應商確實執行 PKCE 時,可按規格利用其防護;適用的 OpenID Connect 流程可用 nonce;其他情況則需要與瀏覽器流程綁定、只使用一次的 state。商戶應記錄所採用的組合。若同一個值可跨分頁複製或完成後再次使用,即使供應商曾成功驗證密碼,仍不能視為合格。

若網站提供多於一個身份供應商,回調時必須知道實際回應者是誰。RFC 9700 要求多供應商用戶端防止供應商混淆,並列出發行者資訊或分開回調地址等方法。不要依回調網址中未經信任的參數,臨時決定把授權碼送到哪個權杖端點。起始流程的預期供應商、回調地址及嘗試狀態要一起保存和核對;供應商不符、流程過期或授權碼已用過,都應拒絕。

顧客可能在供應商頁面取消、關閉分頁、拒絕所需授權範圍,或在本地流程過期後才返回。錯誤畫面要分清「你已取消」與「我們未能核實登入」,但不展示權杖或供應商內部錯誤細節。提供重新開始的操作,不要自動無限重導向。客服可憑不含敏感資料的事件編號查找紀錄,毋須請顧客轉寄包含授權參數的網址。

按顧客旅程驗收

驗收表要以顧客身份及狀態為中心,不只記錄 HTTP 回應。至少包括新顧客、已連結顧客、有本地帳戶但未連結者、電郵碰撞、供應商頁面取消、過期回調、重用授權碼,以及兩個分頁同時開始。每個情況都要寫明預期本地帳戶編號、畫面訊息、會話狀態及訂單可否開啟。測試者除了看成功畫面,也要核對帳戶對應紀錄,因為畫面正常仍可能連錯人。

負面測試應在供應商測試環境或受控模擬端進行。嘗試未登記回調地址、缺少或錯誤的 PKCE 驗證字串、意外發行者、所採流程下不符的 state 或 nonce,以及重播回調。預期結果是沒有新建已登入本地會話,也沒有改動帳戶連結。同時檢查伺服器日誌和分析平台有否洩漏授權碼或權杖。不可把正式憑證送到開發者私人回調地址,也不可為了方便測試而降低正式環境保護。

最後要走完真實購物流程:由產品頁開始,選擇第三方登入,回到安全的原定頁面,檢查購物車,再確認只能開啟正確顧客的帳戶資料。手機瀏覽器、相關的第三方 cookie 限制及供應商故障亦要測試。指定由誰管理供應商設定、回調地址及憑證變更事故。只有按鈕曾經成功一次並不足以推出;異常路線可處理、連結紀錄可追查,才算完成驗收。

進行前先確認

  • 是否以發行者及穩定主體識別碼對應身份,而非只靠電郵?
  • 每次流程有否真正執行 PKCE 及合適的回調偽造防護?
  • 顧客能否有意識地連結、恢復及解除連結,而不接觸別人的帳戶?

資料來源及延伸閱讀