我有两个实现 asp.net 成员资格提供程序的 Web 应用程序。它是一个稍微修改过的成员资格提供程序(所以它是一个自定义成员资格提供程序),但我认为这与这篇文章无关。
该应用程序在同一个域中运行,我想使用 cookie 在它们之间进行交叉身份验证。(它们在 app1.mydomain.com / app2.mydomain.com 中运行)
我正在使用两个应用程序实现相同的提供程序:
- 网络表单 3.5
- MVC 4.5
在这两个应用程序中,我在 webconfig 中配置了相同的部分:身份验证、表单、机器密钥、成员资格、角色管理器。它们都使用自定义的成员资格和角色提供程序,这对于两个应用程序都是相同的。它们都驻留在同一个域中。每个应用程序中的身份验证都运行良好。
问题:
- 在 4.5 应用程序中,如果您登录,然后转到 3.5 应用程序并且您没有登录
- 如果您登录 3.5 应用程序,则您未登录 4.5 应用程序
- 如果您登录 4.0 应用程序,即使您之前登录过,您也会退出 3.5 应用程序,反之亦然
我做过的测试:
- 我已经设置了一个默认的 MVC 4.0/4.5 站点和一个默认的 Web Forms 4.0/4.5 站点,并且跨域 cookie 完美运行。
- 但是,当设置默认 MVC 4.0/4.5 站点和默认 Web Forms 3.5 站点时,SSO 不起作用。
这似乎是框架不兼容,或者在创建或加密 cookie 时框架之间发生了一些变化,似乎浏览器没有将一个站点创建的 cookie 发送到另一个站点。另一方面,它适用于 MVC 和 4.0/4.5 的 WebForms。
这些是每个应用程序的 web.config 部分:
MVC 4:
<authentication mode="Forms">
<forms name="isep" loginUrl="~/Account/LogIn" timeout="20" protection="All" />
</authentication>
<machineKey compatibilityMode="Framework20SP2" validationKey="85A2E75F1FFEEAC971928062F844F0AFAE876B422503FCF7F80C1B84683C323049ACCC02A47D54E2E98B0422D2E3EFF1B16B7E85E8359EF6ABC52974D0EB9AA7" decryptionKey="FCD4A55D93A720914FA40EEC9599BD81BECE1490EB232DB8DD649BBB0D565194" validation="SHA1" decryption="Auto" />
网络表单 3.5:
<authentication mode="Forms">
<forms name="isep" loginUrl="login2.aspx" timeout="20" protection="All" />
</authentication>
<machineKey validationKey="85A2E75F1FFEEAC971928062F844F0AFAE876B422503FCF7F80C1B84683C323049ACCC02A47D54E2E98B0422D2E3EFF1B16B7E85E8359EF6ABC52974D0EB9AA7" decryptionKey="FCD4A55D93A720914FA40EEC9599BD81BECE1490EB232DB8DD649BBB0D565194" validation="SHA1" decryption="Auto" />
<authorization>
<deny users="?"/>
</authorization>
对此有任何线索吗?
谢谢!..
即插即用