我有两个.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项目来测试单点登录:
在这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#代码中变得不可见,还有其他方法让单点登录吗?谢谢
答案 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>