2013-01-18 29 views
3

我有兩個.NET C#項目。它們將被部署在相同的域下,例如domain.com。.ASPXAUTH cookie在螢火蟲中可見但無法在C#代碼中檢索

一個項目也創建了幾年。它使用.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

在該4個項目中,我添加相同的機器密鑰和在Web.config中添加域= 「localhost」 的形式向認證文件。

然後我測試了單點登錄。 我在網站1中創建了一個帳戶,登錄了。我打開了網站2,它已經登錄。很酷!相同的網站3和4.

但是,當我混合不同的框架,沒有任何工作。

我檢查了firebug中的瀏覽器cookie。 .ASPXAUTH cookie停留在那裏。但是,如果Cookie是由Project 1創建的,並且我調試了Project 3,則可以獲得所有Cookie免除.ASPXAUTH cookie。看起來.ASPXAUTH依賴於框架,儘管它在firefox中可見,但其他框架項目無法看到它。

任何人都可以幫我弄清楚爲什麼.ASPXAUTH cookie在C#代碼中變得不可見,並且有沒有其他辦法可以讓單點登錄工作?謝謝

回答

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

+0

它在我的測試項目中效果很好。上班時我會試試真正的。謝謝Levi! =) – ydou

+0

它也適用於真正的項目。非常感謝。你爲我節省了很多時間。 – ydou

+0

謝謝sooooo! –

0

但是,當我是混合不同的框架,沒有什麼工作

這是正常的。由於發現的安全漏洞,.NET版本之間的加密例程發生了變化。因此建議使用following update修補您的服務器。

如果由於某種原因,你不能這樣做,有不推薦一種解決方法:

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