2

这是我的问题的快速版本:

当 cookie 用于不同的服务器(在本例中为 Exchange 邮件服务器)时,是否可以以某种方式将 cookie 设置到客户端的浏览器中?在这种情况下,尝试设置 cookie 的服务器位于“intranet.myschool.edu”,交换服务器位于“owa_server.myschool.edu”。


这是完整的问题:

我有一个 php 脚本,它使用 cURL 向启用了基于表单的身份验证的 Exchange 服务器进行 HTTP POST。

当我成功进行 HTTP POST(其中包括发布的 url 中的用户/密码)时,Exchange Server(或更具体地说,是https://my.school.edu/exchweb/bin/auth/owaauth.dll文件)输出 cookie。具体来说,它输出一个“sessionid”和一个“cadata”id。

将这些 cookie id 写入服务器上的文本文件后,cURL/PHP 可以引用它,然后从 Exchange/OWA 服务器请求数据(通过 webdav 等)。

那部分有效。我想解决的问题是现在将 cookie id 传递给客户端浏览器,以便他们可以使用这些 cookie id 自动登录到他们自己的 OWA 帐户。

本质上,我希望我们的用户使用他们的 Active Directory ID 登录我们的 Intranet,并查看他们最近电子邮件的快照。然后,如果他们需要,我会给他们一个小链接以切换到完整的 OWA Web 应用程序。发生此切换时,我不希望他们必须手动登录 OWA。由于他们已经在 Intranet 前面提交了他们的 Active Directory 用户名和密码,我希望他们能够自动登录到 OWA。

我应该注意,使用 Windows 身份验证尝试进行单点登录是不可能的,因为我们混合了 Mac OS、Windows 和 Linux。

我原以为我可以做一个“setcookie”并分配 cURL 获得的 cookie id 并将它们放入客户端浏览器中。

这不可能吗?是否不可能以这种方式“欺骗”Exchange/OWA(或任何其他站点)。我有 cURL 捕获的合法 cookie id。有没有办法将这些传递给另一台计算机上的客户端浏览器?

在最坏的情况下,使用 Javascript 将用户名和密码自动粘贴到 OWA 登录页面是我唯一的希望吗?有人对如何避免 Exchange/OWA 的双重登录问题有任何其他想法吗?

感谢您提供的任何帮助!

4

7 回答 7

5

来自RFC 2965 (NB HDN = "主机域名)

主机 A 的名称域匹配主机 B 的 if

  *  their host name strings string-compare equal; or

  * A is a HDN string and has the form NB, where N is a non-empty
     name string, B has the form .B', and B' is a HDN string.  (So,
     x.y.com domain-matches .Y.com but not Y.com.)

请注意,域匹配不是交换操作:abccom
域匹配 .c.com,但不是相反。

所以使用.myschool.edu作为域应该可以。NB领先。是必不可少的

于 2009-01-29T22:18:20.880 回答
3

可以设置一个域部分为“.myschool.edu”的 cookie。理论上,它会被发送到托管在“myschool.edu”子域下的任何其他站点。

然而,在实践中,您的客户端软件可能会认为 cookie 的范围太广,并拒绝将其发回。

于 2009-01-29T22:12:21.983 回答
1

在这种情况下,尝试设置 cookie 的服务器位于“intranet.myschool.edu”,交换服务器位于“owa_server.myschool.edu”。

你应该能够做到这一点。

我在我的网站上执行此操作(出于示例的目的,我将更改名称):

我在 url 有一个网络应用程序

webapp.domain.com

当用户登录时,我将 PunBB 论坛包的 cookie 设置为:

论坛.domain.com

通过设置/清除 PunBB 论坛 cookie,我可以自动登录/注销我的用户在他们的论坛帐户上(这当然假设注册是同步的,在我的情况下,我删除了论坛注册并且主站点注册创建了论坛用户帐户)。

您需要做的就是在 subdomain#1 中将 cookie 路径设置为“/”(默认),并将 cookie 域设置为“domain.com”。然后您的子域#2 中的应用程序应该会看到 cookie。

编辑:我看到barrowc已经回答,我在一些示例中看到了“.domain.com”模式,我的网站使用“domain.com”作为 cookie 域,它也可以工作(如果缺少,php set_cookie 可能会添加前导点?)

于 2009-01-29T23:39:09.080 回答
1

如果可能的话,我认为这将是一个严重的安全漏洞......

于 2009-01-29T22:05:17.037 回答
0

您可以使用 iframe 来设置 cookie,即。在您的网络服务器上有一个 iframe,它向您的交换 http 服务器 ( https://my.school.edu/exchweb/ ) 上的页面发出请求,并将您想要的 cookie 变量设置为 get 或 post 变量。然后使用 vars 为该域设置 cookie,并将用户重定向到交换服务器。

现在,OWA 的后端可能存在检查 IP 地址、用户代理等的逻辑......在注册会话时可能会使其无效......不确定

于 2009-01-31T04:36:36.170 回答
0

您的浏览器可以决定...但通常不,您不能。这被认为是一种 XSS 漏洞。

于 2009-01-29T22:47:32.240 回答
0

几个月来我们一直在努力解决这个问题,我们能想到的最好的办法是允许 Web 服务器在每次登录时获取 Exchange 的 cookie。问题是,如果没有 cookie 亲和性,我们就无法确保 Web 服务器获得的 cookie 来自客户端连接的同一个负载平衡节点。

于 2009-11-06T19:46:50.350 回答