2010-11-25 48 views
3

背景:IIS6和IIS7窗體身份驗證兼容性

我有兩個Web應用程序,成立了不同的Web服務器,這是目前雙方IIS6。應用程序1(A1 - a1.domain.com)使用由應用程序2(A2 - a2.domain.com)設置的表單身份驗證cookie。

在web.config中A1我:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" /> 
</authentication> 

在web.config中A2我:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="login.aspx" timeout="60" /> 
</authentication> 

這兩個應用程序在web.config中也分享的machineKey值

這完美無缺地工作。

問題:

我升級A1使用.NET 4.0和IIS7運行,現在的共享窗體身份驗證不起作用。我仍然被重定向到A2上的正確登錄頁面,並且我可以看到它設置了auth cookie,但是當我回到A1時,身份驗證失敗並顯示以下錯誤(來自事件查看器):

表單身份驗證失敗請求。原因:提供的票據無效。

我曾嘗試:

  • 設置在IIS6 A1的升級版(這個工作 - 所以不存在兼容性問題窗體身份驗證之間在IIS6不同的.NET版本)

  • 設置使用本地登錄頁面即複製登錄頁面從A2在IIS7升級A1到A1和設置A1 loginUrl =「login.aspx的」(也適用)

這讓我猜測,由於IIS6網站正在用於在IIS7網站下對用戶進行身份驗證而創建auth cookie,導致存在一些兼容性問題。

有誰知道如何解決這個問題?

回答

2

在.NET 4.0中,身份驗證票據的加密方式已更改。如果你想與舊版本兼容,你可以這樣設置ticketCompatibilityMode屬性:

<forms 
    loginUrl="/Login.aspx" 
    timeout="2880" 
    ticketCompatibilityMode="Framework20" 
    domain="domain.com" 
/> 
+0

謝謝,但不幸的是,這並沒有奏效。我不認爲我看到2.0和4.0之間的任何兼容性問題,因爲我已經在與A2相同的服務器上的IIS6中設置了A1(但使用了不同版本的.NET),並發現這可以工作。唯一不工作的是它跨越兩臺服務器,一臺使用IIS6,另一臺使用IIS7而不管.NET版本。 – Chris 2010-11-25 11:59:43