本地开发/调试时httpOnly cookie

Gau*_*aui 6 .net authentication cookies web-services localhost

我有一个 Web 客户端和几个 Web 服务(以及一个身份验证服务)。我web-test.domain.comservices-test.domain.com.

为了调试,我在本地运行了一些Web 服务。但问题是当我在本地运行 auth 服务(设置 cookie 的地方)但其他人运行时services-test.domain.com,cookie(带有 sessionID)不会随请求一起发送到其他 Web 服务(因为它的域是localhost并且它们是不在本地运行),所以他们总是抛出一个401 Unauthorized异常,我会自动从网络上注销。

这是因为 auth 服务在 localhost 上运行,所以响应是一个 cookie,Domain=localhost但是当请求发送到其他 Web 服务时,没有发送 cookie,因为它是 httpOnly localhost cookie。导致其他 Web 服务认为我没有登录。

有什么方法可以在本地运行身份验证服务并获得跨域工作的 httpOnly cookie(对于 localhost 和 services-test.domain.com)

在使用 httpOnly 域特定 cookie 时,在本地开发、调试和运行 auth 服务时,您是如何做到这一点的?

这是演示问题的图像:

在此处输入图片说明

可能的解决方案:

  1. 在本地运行所有 Web 服务。
  2. 转到web-test.domain.com,登录并获取该域(会话 A)的 cookie。然后登录本地运行的服务并获取 localhost(会话 B)的 cookie。然后会话 A 将用于所有外部服务,会话 B 将用于所有本地服务。
  3. 添加services-test.domain.com/etc/hosts文件,以便为该域设置 cookie,并且也适用于外部服务。

编辑:我目前正在使用#2。但这对我来说并不完全有意义,因为有两个不同的会话。

Suc*_*Eus 0

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials上指定的

来自不同域的 XMLHttpRequest 响应无法为其自己的域设置 cookie 值,除非...

您可以通过添加一些标志来解决此问题,以便允许在不同的域上设置 cookie。您的所有XMLHttpRequest请求都需要使用以下标志提出:withCredentials: true

此外,您的后端服务器需要使用特殊标头 ( Access-Control-Allow-Credentials: true) 进行响应,以允许在跨源请求上发送 cookie。


确保仅在调试模式下执行这些操作。如果您的应用程序处于开发模式,则需要添加withCredentials:true,您也可以运行脚本来添加Access-Control-Allow-Credentials到后端 Web 服务器(例如 nginx 或向 API 添加配置)

请注意,如果您添加,CORS 通配符 (*) 将不起作用Access-Control-Allow-Credentials: true,并且您需要显式指定主机、方法和标头。