2011-02-07 88 views
4

我有一個.NET 2.0 Web應用程序,它充當舊版.NET 1.1 Web應用程序的身份驗證存根。因此,用戶通過2.2應用程序登錄,然後重定向到1.1應用程序來完成他們的業務。我使用了技術described by Scott Guthrie,並在本地web.config文件中匹配機器密鑰,以便兩個應用程序都可以讀取身份驗證票證。這項技術在五年內爲我工作了幾年。爲什麼我的ASP.NET單一登錄停止工作?

直到現在。

截至今天早上,我們的配對應用程序中有四個配置爲如上所述,已停止生產:我們在(看起來)成功的身份驗證嘗試後退回。在登錄嘗試期間,我會彈回到登錄頁面。我檢查了事件日誌和IIS日誌,並沒有發現任何後果。我們可以看到auth cookie已經在我們的瀏覽器中設置。我們嘗試了多種瀏覽器(IE和Chrome)。在週末我知道在Web服務器上安裝了十多個補丁,其中一個增加了Framework 4.0,但我無法知道這些補丁是否會導致問題。有趣的是,在聖誕節前我注意到了我的開發箱上的相同行爲。從那時起,四個配對的應用程序中沒有一個已經重新部署,所以不要認爲這是導致它擴展到生產的部署問題。

一個一對仍在工作的應用程序,我們正在比較代碼和配置以查看發生了什麼,但到目前爲止我們還沒有找到任何東西(否則我不會寫這篇文章!)

UPDATE 我想通了什麼孤對應用程序在做正確的:它是通過代碼處理授權。所以,我開發了我生病的應用解決方法:

ORIGINAL:

<authorization> 
    <allow deny="?" /> 
</authorization> 

解決方法:

<authorization> 
    <allow users="*" /> 
</authorization> 

然後,我添加代碼到我的ASPX基頁以檢查AUTH的cookie:

if (Request.Cookies.Get(FormsAuthentication.FormsCookieName) == null) 
    Response.Redirect(System.Configuration.ConfigurationSettings.AppSettings["MembershipLoginURL"],true); 

我的代碼似乎履行了以前由ASP.NET執行的一個角色,即checki無論用戶是否被授權。所以 - 我有一個解決方法,但是這個謎仍然存在。

有沒有人知道是否有過去四個月發佈的微軟補丁(我們的服務器剛剛更新了四個月的補丁),這使ASP.NET無法在Web應用程序之間驗證/解密cookie .NET的不同版本?

+0

不知道很多信息,沒有辦法回答這個問題。您可以開始將每個補丁應用到測試機器上,並查看它在什麼時候中斷,但是不知道補丁是什麼,我們甚至無法開始理解造成問題的原因。 – 2011-02-07 18:00:59

+0

我們的服務器是虛擬機。今天下午我們將恢復更新之前拍攝的圖像。希望我們至少可以確定它是否是一個補丁問題。 – Aaronster 2011-02-07 18:46:05

回答

1

如果服務器上有一個正在運行的應用程序,那麼這似乎從補丁本身就是問題,儘管它們可能是其中的一部分。

我有這些事情的操作順序。當你看到問題時,調試它。如果你不能調試它,用它來測試它(把代碼放在應用程序裏面的日誌裏)。如果你不能測試它,請將其分開。

如果你還沒有使用diff工具,我強烈建議使用一個。我喜歡Scooter Software的Beyond Compare,但還有很多其他的好的。將它安裝在您的服務器上,並在工作和非工作配置之間運行差異。那可能會在那裏告訴你答案。

這聽起來並不像你在這個場景中的任何地方使用證書,但是他們在SSO中發揮了很大的作用,所以在涉及證書的機會中,你沒有提到它,到期證書讓SSO在一夜之間神祕地降下來,所以一定要仔細檢查一下。

+0

我們爲整個網站提供SSL證書,但它們並沒有接近即將到期的地步。我有一個我現在正在執行的解決方法。一旦我確定它在製作中有效,我會發布我的發現。目前我的理論是,IIS不能再讀取1.1應用程序中的2.0生成的身份驗證cookie(而上週它可以)。無論如何,更多來吧! – Aaronster 2011-02-07 18:49:17

相關問題