4

我有两个 .NET C# 项目。它们将部署在同一个域下,例如 domain.com。

几年后也创建了一个项目。它使用.NET 4.0。我们称之为 MAIN_1。该项目使用另一个外部项目对用户进行身份验证,该项目甚至更早(.NET 3.5)。我们称之为 AUTH_PROJ。我正在 VS2012 中使用 MVC4 和 .NET 4.5 创建一个新项目。我们称之为 MAIN_2。MAIN_1 和 MAIN_2 将部署在同一个域(例如 domain.com)下。我的目标是让用户在 MAIN_1 中登录并在 MAIN_2 中进行身份验证。我在网上搜索,发现这篇文章http://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic非常有趣和有用。我通过在 Visual Studio 2012 Professional 中制作一些简单的 MVC 项目来测试单点登录:

  1. 项目一:.NET4.5 MVC4 互联网项目。=> 网站 1
  2. 项目 2:与项目 1 相同。=> 网站 2
  3. 项目 3:.NET 4 MVC3 互联网项目。=> 网站 3
  4. 项目 4:与项目 2 相同。=> 网站 4

在这 4 个项目中,我添加了相同的机器密钥,并将 domain="localhost" 添加到 Web.config 文件中的表单身份验证中。

然后我测试了单点登录。我在网站 1 中创建了一个帐户并登录。我打开了网站 2,它已经登录了。太棒了!网站 3 和 4 相同。

但是当我混合不同的框架时,没有任何效果。

我在firebug中检查了浏览器cookie。.ASPXAUTH cookie 保留在那里。但是如果 cookie 是由项目 1 创建的,并且我调试项目 3,我可以获得除 .ASPXAUTH cookie 之外的所有 cookie。似乎 .ASPXAUTH 取决于框架,虽然它在 Firefox 中可见,但其他框架项目看不到它。

谁能帮我弄清楚为什么 .ASPXAUTH cookie 在 C# 代码中变得不可见,还有其他方法可以使单点登录工作吗?谢谢

4

2 回答 2

3

在您的 4.5 项目中,尝试在 Web.config 中设置此配置开关:

<machineKey compatibilityMode="Framework20SP1" />

4.5 和 4.0 对表单身份验证票使用不同的加密例程。在 4.5 项目中设置上述开关应该会强制它使用与 4.0 相同的例程。有关详细信息,请参阅http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx

于 2013-01-18T09:08:33.947 回答
0

但是当我混合不同的框架时,没有任何效果

这很正常。由于发现的安全漏洞,.NET 版本之间的加密例程发生了变化。因此,建议使用following update.

如果由于某种原因你不能这样做,有一个不推荐的解决方法:

<appSettings>
    <add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
    <add key="aspnet:UseLegacyEncryption" value="true" />
    <add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
</appSettings>
于 2013-01-18T06:29:10.760 回答