”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在重定向期间为不同的域设置 Cookie 或标头?

如何在重定向期间为不同的域设置 Cookie 或标头?

发布于2024-11-01
浏览:166

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