【问题标题】:httpOnly cookie when developing/debugging locally本地开发/调试时的 httpOnly cookie
【发布时间】:2015-05-02 23:02:15
【问题描述】:

我有一个 Web 客户端和几个 Web 服务(以及一个身份验证服务)。我在web-test.domain.com 上运行网络,在services-test.domain.com 上运行服务。

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

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

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

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

这是一个演示问题的图像:

可能的解决方案:

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

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

【问题讨论】:

    标签: .net web-services authentication cookies localhost


    【解决方案1】:

    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 添加配置)

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

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2020-11-19
      • 1970-01-01
      • 2021-08-26
      • 2021-08-05
      • 2011-05-18
      • 1970-01-01
      • 2012-07-01
      • 2014-08-25
      相关资源
      最近更新 更多