0

開発 Web ファームに展開された .Net 4.0 ASP.Net Web アプリケーションで FormsAuthentication.Encrypt(data) を介してデータを Cookie に暗号化しています。ValidationKey、DecryptionKey、および Decryption (アルゴリズム) をハードコーディングするために machineKey 属性を指定しました。
現在、開発ワークステーションで構築したアプリケーションを使用して、その Cookie を復号化しようとしています。Request.Cookies["CookieName"] 経由で Cookie を取得できますが、FormsAuthentication.Decrypt(encCookie) 経由で値を復号化しようとすると、次のエラーが発生します。

データを検証できません。System.Web.Configuration.MachineKeySection.EncryptOrDecryptData (ブール値 fEncrypt、Byte[] buf、Byte[] 修飾子、Int32 開始、Int32 長さ、ブール値 useValidationSymAlgo、ブール値 useLegacyMode、IVType ivType、ブール値 signData) で System.Web.Security.FormsAuthentication c:\src\ets_2008\main\ebtDev\Sandboxes\rrozinov\TuoVanitySite\TuoVanitySite\Default.aspx.cs:line 22 の TuoVanitySite.Default.Page_Load(Object sender, EventArgs e) での .Decrypt(String encryptedTicket)

これは私のWeb設定からのぼかしです(キーは削除されました):

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

machineKey が十分でないこの状況に対処した人はいますか?

4

2 に答える 2

1

わかりました、問題の解決策を見つけることができましたが、なぜこれが機能するのかわかりません。検証属性を machineKey に追加する必要がありました。

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

少し興味深いのは、SHA1 を使用するか 3DES を使用するかに関係なく、私のコードは問題なく復号化できるという事実です。サーバーがデフォルトのSHA1を使用していることを確認しました。私は、教育目的で根本的な原因を見つけることにまだオープンです。

于 2013-04-12T07:00:51.300 に答える
0

How To: ASP.NET 2.0 で MachineKey を構成する」記事に記載されているとおり:

検証が AES または 3DES に設定されている場合でも、HMACSHA1 が使用されます。

そのため、互換モードが Framework20SP1 または Framework20SP2 に設定されている場合、validation 属性の設定に関係なく SHA1 が使用される場合があります。

Windows Server 2012 の IIS8 にデプロイされた ASP.Net 4.0 と 3.5SP1 Web アプリケーションの間でシングル サインオンをセットアップするという、現在同様の作業に苦労しています。Win2k12 には .Net 4.5.1 があるため、より複雑になります。 4.0 への「インプレース」アップグレード...

于 2013-12-27T23:16:54.527 に答える