」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在重定向期間為不同的網域設定 Cookie 或標頭?

如何在重定向期間為不同的網域設定 Cookie 或標頭?

發佈於2024-11-01
瀏覽:831

How to Set Cookies or Headers for a Different Domain During a Redirect?

如何從一個網域重新導向到另一個網域並為另一個網域設定 Cookie 或標頭?

HTTP 重定向不允許為目標設定自訂標頭或 Cookie領域。此外,瀏覽器會封鎖為與使用 Set-Cookie 標頭回應的網域不同的網域設定 Cookie。

解決方案 1:使用查詢參數重新導向,然後設定 Cookie

  1. 重新導向自網域 A 到網域 B,並將存取權杖作為查詢參數傳遞。
  2. 域 B 接收請求並使用令牌設定自己的 cookie。

解決方案 2:跨源與 Window.postMessage() 通訊

  1. 向域 A 新增一個指向域 B 的隱藏 iframe。
  2. 使用 Window.postMessage() 將存取權杖傳送至網域 B。
  3. 域 B 將令牌儲存在 localStorage 中或使用 JS 設定 cookie。
  4. 向域 A 發送令牌已儲存的訊息,並將使用者重新導向至網域 B。

解決方案 3:伺服器端令牌交換

  1. 在網域 A 中使用 如何在重定向期間為不同的網域設定 Cookie 或標頭? 標記指向網域 B,並以存取權杖作為查詢參數。
  2. 域 B 回應收到請求後設定 Cookie 標頭。
  3. 使用 fetch 或 XMLHttpRequest(啟用憑證和 CORS)將代幣直接傳送到網域 B。
  4. 域B 收到存取權限後設定cookie token.

重要說明:

  • 必須在瀏覽器設定中啟用所有cookie,解決方案2 和3 才能運作。
  • 使用 SameSite=無;解決方案 3 的 cookie 中的安全標誌。
  • 解決方案 1 中的查詢字串會公開存取權杖並帶來安全風險。
  • 解決方案 3 需要在目標網域上啟用 CORS,並在目標網域上啟用明確的來源規格伺服器端。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3