gpt4 book ai didi

c# - 在多个服务器和子域上设置持久表单例份验证

转载 作者:太空狗 更新时间:2023-10-29 23:33:35 25 4
gpt4 key购买 nike

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

<system.web>
<machineKey validationKey="574...7A7"
decryptionKey="2C3...A0D"
validation="HMACSHA256"
decryption="AES" />
</system.web>

...我的表单例份验证为每个应用程序配置相同:

<forms loginUrl="/login" timeout="2880" defaultUrl="/" path="/" name=".SHAREDAUTH" domain="domain.com" protection="All" />

我也试过按照一些人的建议在我的域前加上一个句点,但这也没有用。

这在我的本地机器上运行良好,在 IIS 中为每个子域设置了单独的站点。它在我们的开发服务器上也能正常工作,所有站点仍然驻留在一台机器上。然而,当我部署到我们的暂存环境时,跨域身份验证停止工作。在那个环境中,我的主站点(登录发生的地方)在单个服务器上运行,辅助站点(我的身份验证应该在其中持续存在)在两个负载平衡的服务器上运行。所有这些都在 Windows 7(本地)或 Server 2008 R2(开发和暂存)上的 IIS 7 下运行。

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

我还设置了自定义的 MembershipProvider 和 RoleProvider,它们在每个站点上都可以独立运行。

我错过了什么?

最佳答案

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

Per the MS deployment guidance article ,如果你发现自己处于这种情况,你可以添加

<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />

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

关于c# - 在多个服务器和子域上设置持久表单例份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com