.ASPXAUTH cookie在firebug中可见,但无法在C#代码中检索

时间:2013-01-18 06:22:03

标签: asp.net-mvc-3 cookies asp.net-mvc-4 visual-studio-2012

我有两个.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. 项目1:.NET4.5 MVC4互联网项目。 =>网站1
  2. 项目2:与项目1相同= =>网站2
  3. 项目3:.NET 4 MVC3互联网项目。 =>网站3
  4. 项目4:与项目2相同。=>网站4
  5. 在这4个项目中,我添加了相同的机器密钥并添加了domain =" localhost"在Web.config文件中形成身份验证。

    然后我测试了单点登录。 我在网站1中创建了一个帐户,登录。我打开了网站2,它已经登录了。很酷!网站3和4也是如此。

    但是当我混合使用不同的框架时,没有任何作用。

    我在firebug中检查了浏览器cookie。 .ASPXAUTH cookie留在那里。但是如果cookie是由Project 1创建的,并且我调试了Project 3,那么我可以获得所有cookie .ASPXAUTH cookie。似乎.ASPXAUTH依赖于框架,虽然它在firefox中可见,但其他框架项目无法看到它。

    任何人都可以帮我弄清楚为什么.ASPXAUTH cookie在C#代码中变得不可见,还有其他方法让单点登录吗?谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  

但是当我混合使用不同的框架时,没有任何工作

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

如果由于某种原因你不能这样做,那么就不推荐使用解决方法:

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