4

我有两个实现 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>

对此有任何线索吗?

谢谢!..

即插即用

4

2 回答 2

4

尝试在 web.config 中设置元素的,如以下答案中所述CompatabilityModeMachineKey

升级到 ASP.NET 4.5/MVC 4 表单身份验证失败


更新后

将元素的domain属性设置authentication\forms为以下内容:

<authentication mode="Forms">
  <forms domain=".somedomain.com" name="isep" loginUrl="~/Account/LogIn" timeout="20" protection="All" />
</authentication>

somedomain您的主域在哪里。

于 2012-12-31T17:10:28.773 回答
-1

附加评论:

这些 web.config 参数是否与当前问题有冲突:

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

或者......他们可以帮助解决问题吗?

谢谢!..

即插即用

于 2012-12-31T18:03:15.857 回答