我有在同一服務器上運行兩個.NET Web應用程序之間FormsAuthentication - 定點(在https://sentinel.mydomain.com/託管)和fortknox(在http://www.mydomain.com/fortknox)「無法驗證數據」使用不同的Web應用程序
是哨兵一個認證'門戶'。 FortKnox是一個'概念驗證'應用程序,它使用表單身份驗證,但將loginUrl設置爲https://sentinel.mydomain.com/login(以及特殊的Application_EndRequest處理程序以限定ReturnUrl)。 Sentinel使用MVC 4和Razor在.NET 4.0中編寫; FortKnox是使用.NET 2.0的ASP.NET MVC 2。
我正在使用ASP.NET FormsAuthentication並將cookie域設置爲.mydomain.com
,以便將由sentinel.mydomain.com
設置的Cookie發送請求至www.mydomain.com
,反之亦然。 Cookie部分工作正常 - 兩個應用程序都獲得相同的.ASPXAUTH加密表單票證。
的問題是,在我們的生產服務器,fortknox不能解密定點創建的cookie - 即使他們有相同的機鍵。即使兩個應用程序都在同一個物理盒子上運行,它也不起作用。
用戶點擊fortknox,他們重定向到定點,他們登錄的Cookie設置,他們重定向回fortknox,然後我得到「無法驗證數據」:
Exception: Unable to validate data.
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo, Boolean signData)
at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo)
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)
at FortKnox.Web.MvcApplication.Application_BeginRequest()
本機鍵是相同的 - 我已經儘可能包括該區塊的每個頁面的加價(討厭!)代碼:
try {
var cookie = Request.Cookies[".ASPXAUTH"].Value;
Response.Write("Cookie: " + cookie + Environment.NewLine);
var ticket = FormsAuthentication.Decrypt(cookie);
Response.Write("Ticket name: " + ticket.Name + Environment.NewLine);
} catch (Exception x) {
Response.Write("Exception: " + x.Message + Environment.NewLine);
Response.Write(x.StackTrace);
}
Response.Write("<hr /></pre>");
var machineConfigMachineKey = (MachineKeySection)WebConfigurationManager.OpenMachineConfiguration().SectionGroups["system.web"].Sections["machineKey"];
var webConfigMachineKey = (MachineKeySection)WebConfigurationManager.OpenWebConfiguration("").SectionGroups["system.web"].Sections["machineKey"];
Response.Write("<pre>");
Response.Write("<b>machine.config decrypt: </b>" + machineConfigMachineKey.DecryptionKey + "<br />");
Response.Write("<b>web.config decrypt: </b>" + webConfigMachineKey.DecryptionKey + "<br />");
Response.Write("<br />");
Response.Write("<b>machine.config validate: </b>" + machineConfigMachineKey.ValidationKey + "<br />");
Response.Write("<b>web.config validate: </b>" + webConfigMachineKey.ValidationKey + "<br />");
Response.Write("</pre>");
Response.Write("<hr />");
,並驗證了在運行時所使用的機器密鑰一模一樣。
特別令人沮喪的是,這一直在我們的開發和登臺服務器上工作,並且只在生產中失敗。服務器之間唯一的區別在於生產環境中經常安裝Windows更新,而我們的開發/升級框可能會缺少一些更新;他們在其他方面是相同的(從相同的圖像克隆,並使用相同的安裝腳本創建)
所以...同樣的服務器;相同的機器密鑰。 ASP.NET 4設置了FormsAuthentication cookie。 ASP.NET 2應用程序無法解密它。僅在某些服務器上發生錯誤;在別人身上,它正在工作。在這一點上,我完全卡住了......有什麼想法?
編輯:Live服務器已被帶到最新的補丁級別。我曾嘗試申請
<add key="aspnet:UseLegacyEncryption" value="true" />
既是真假,雙方在登錄應用程序和應用程序fortknox。仍然沒有運氣...
我有同樣的問題,並且已經嘗試了3個按鍵,但沒有成功,它採用2.0和1.1,目前之間的合作與2.0和1.1的工作,但不能與4.0 – 2013-11-07 13:17:35