在多个服务器和子域上设置持久性表单身份validation

我正在尝试跨多个服务器和子域设置表单身份validation。 我为每个应用程序设置了静态机器密钥,如下所示:

   

…我的表单身份validation配置为每个应用程序相同:

  

我也试过在我的域名前加上一段时间,因为我看到一些人建议,但这也不起作用。

这在我的本地计算机上运行正常,在IIS中为每个子域设置了单独的站点。 它也可以在我们的开发服务器上运行,所有站点仍然驻留在一台机器上。 但是,当我部署到临时环境时,跨域身份validation将停止工作。 在该环境中,我在单个服务器上运行主站点(发生登录的位置),在两个负载平衡的服务器上运行辅助站点(我的身份validation应该保留的位置)。 所有这些都在Windows 7(本地)或Server 2008 R2(开发和登台)上的IIS 7下运行。

我通过使用MachineKey.Encode在主站点上编码字符串并使用MachineKey.Encode在辅助服务器上解码结果来validation机器密钥是相同的MachineKey.Decode. 我还validation了.SHAREDAUTH cookie是通过检查Firefox和Chrome报告的请求标头,以及将调试器挂钩到Application_BeginRequestApplication_AuthenticateRequest.来传递给请求中的第二个应用Application_AuthenticateRequest. 我可以在Application_BeginRequest执行期间看到cookie,但是当调用Application_AuthenticateRequest时它就消失了。 从我可以收集的内容来看,这似乎意味着身份validation票证的反序列化失败,但我无法弄清楚为什么在多服务器环境中可能发生这种情况,而不是单个服务器环境,除了不同的机器密钥,我已经证实并非如此。

我还设置了自定义MembershipProvider和RoleProvider,并且这些工作在每个站点上都可以独立工作。

我错过了什么?

因此,经过长时间的努力 ,我发现了MS安全公告MS11-100 ,它修复了表单身份validation中的特权提升漏洞。 不幸的是,补丁不向后兼容。 它应用于我们的负载平衡服务器,但不适用于托管创建初始登录的应用程序的服务器,这意味着平衡服务器无法反序列化应用服务器编写的身份validation票证。

根据MS部署指南文章 ,如果您发现自己处于这种情况,可以添加

  

到安装了补丁(或机器级配置)的计算机上的应用程序的web.config中的appSettings部分。 或者,更好的是,确保您的托管管理公司同时将修补程序应用于您的所有服务器…

对我来说,它可以在appsettings中添加这些键: