2013-04-12 94 views
0

我通過在開發Web場上部署的.Net 4.0 ASP.Net Web應用程序中的FormsAuthentication.Encrypt(數據)將數據加密到cookie中。我已經指定了一個machineKey屬性來對ValidationKey,DecryptionKey和Decryption(算法)進行硬編碼。
現在,我試圖使用我的開發工作站上構建的應用程序解密該cookie。我能夠通過Request.Cookies時得到的餅乾[「CookieName」]但是當我試圖通過FormsAuthentication.Decrypt(encCookie)解密的價值,我得到以下錯誤:解密使用FormsAuthentication.Encrypt加密的數據

Unable to validate data. at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo, Boolean useLegacyMode, IVType ivType, Boolean signData) at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) at TuoVanitySite.Default.Page_Load(Object sender, EventArgs e) in c:\src\ets_2008\main\ebtDev\Sandboxes\rrozinov\TuoVanitySite\TuoVanitySite\Default.aspx.cs:line 22

這裏是blurp從我網絡配置(鍵被刪除):

<machineKey 
    validationKey="keyA" 
    decryptionKey="keyB" 
    decryption="3DES" 
    compatibilityMode="Framework20SP1"/> 

任何人已經處理了這種情況machineKey是不夠的?

回答

1

好的,我能找到一個解決方案,但我不知道爲什麼這個問題。 我不得不驗證屬性添加到的machineKey:

<machineKey 
    validationKey="keyA" 
    decryptionKey="keyB" 
    validation="SHA1" 
    decryption="3DES" 
    compatibilityMode="Framework20SP1"/> 

是什麼使得它有點有趣的是,我不管把SHA1或3DES,我的代碼可以解密就好了這一事實。我確實確認服務器正在使用默認的SHA1。我仍然願意爲教育目的尋找根源。

0

如「How To: Configure MachineKey in ASP.NET 2.0」的文章中提到:

因此,它可能是,如果兼容模式設置爲Framework20SP1或Framework20SP2那麼它使用的,無論是什麼在驗證設置SHA1的情況下屬性。

我正在努力處理類似的任務 - 在Windows Server 2012上的IIS8上部署的ASP.Net 4.0和3.5SP1 Web應用程序之間建立單點登錄。它變得更加複雜,因爲Win2k12具有.Net 4.5 .1這是一個「就地」升級到4.0 ...