【发布时间】: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 服务时,您是如何做到这一点的?
这是一个演示问题的图像:
可能的解决方案:
- 在本地运行所有 Web 服务。
- 转到
web-test.domain.com,登录并获取该域的cookie(会话A)。然后登录本地正在运行的服务并获取 localhost(会话 B)的 cookie。然后会话 A 将用于所有外部服务,会话 B 将用于所有本地服务。 - 将
services-test.domain.com添加到/etc/hosts文件中,以便为该域设置 cookie,并且也适用于外部服务。
编辑:我目前正在使用#2。但这对我来说并不完全有意义,因为有两个不同的会话。
【问题讨论】:
标签: .net web-services authentication cookies localhost