我正在使用相同域但不同子域的 .NET 2.0 站点和 .NET 4.0 站点之间进行 SSO。在单台机器上的开发环境中一切正常,但我无法让 4.0 生产站点接受 2.0 生产站点生成的身份验证 cookie。这两个站点位于不同的服务器上,一个运行仅安装了 2.0 框架的 IIS 6,另一个运行安装了 4.0 框架的 IIS 7.5。我已经阅读了其他问题的所有其他答案,这些问题指出了<machineKey>
元素和元素的问题<authentication><forms>
,相信我,所有这些东西都已正确设置,并且所有 4 个站点对这些元素具有完全相同的属性值。
起初我认为这是加密的问题,但是当我仔细查看 Fiddler 发生的事情时,我发现 auth cookie 已在请求中正确传递,但似乎在某个时候消失了,然后就没有了在 Request.Cookies 集合中可用。
4.0 生产站点位于负载均衡器后面,但目前网络场中没有其他在线服务器。负载均衡器会以某种方式丢弃 cookie 吗?cookie 是否因为不是有效的身份验证 cookie 而未添加到 Request.Cookies 集合中?如果是这样,为什么它无效?
总而言之,当我在请求的页面上执行以下操作时:
HttpCookie AuthCookie = Request.Cookies.Get(".SSOAUTH");
AuthCookie 为空,即使我可以在 Fiddler 的请求标头中看到具有该名称的 cookie。