48

特定の時間に asp.net Web サイトで次のエラーが表示されます。

 Sys.WebForms.PageRequestManagerServerErrorException: 
 Validation of viewstate MAC failed. 
 If this application is hosted by a Web Farm or cluster,
 ensure that <machineKey> configuration specifies the 
 same validationKey and validation algorithm. 
 AutoGenerate cannot be used in a cluster.

ページが更新されても問題ありません。この問題を解決するにはどうすればよいですか?

4

17 に答える 17

30

Web ファームを使用していて、複数のコンピューターで同じアプリケーションを実行している場合は、machine.config ファイルでマシン キーを明示的に定義する必要があります。

<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decryptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" />

<system.web>タグの下に入れます。

マシン コードの AutoGenerate は使用できません。独自の machineKey を生成するには、次の PowerShell スクリプトを参照してください: https://support.microsoft.com/en-us/kb/2915218#bookmark-appendixa

于 2011-04-30T09:51:26.410 に答える
26

Microsoft は、キー ジェネレータ Web サイトを決して使用しないと述べています。

ここにいる他のみんなと同じように、これを に追加しましたweb.config

<System.Web>
    <machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242" 
                validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA" 
                validation="SHA1" />
</system.web>

ただし、次のように IIS を machineKey ジェネレーターとして使用しました。

  1. IIS を開き、Web サイトを選択すると、次の画面が表示されます。

ここに画像の説明を入力

  1. マシン キー アイコンをダブルクリックすると、次の画面が表示されます。

ここに画像の説明を入力

  1. 上の写真で概説した右側の「キーの生成」リンクをクリックします。

ノート:

  • 「アプリケーションごとに一意のキーを生成する」チェックボックスを選択すると、キーの末尾に「,IsolateApps」が追加されます。アプリを機能させるには、これらを削除する必要がありました。明らかに、それらはキーの一部ではありません。
  • SHA1 は IIS によって選択された既定の暗号化方法であり、変更する場合は、web.config の machineKey の検証プロパティを変更することを忘れないでください。ただし、暗号化の方法とアルゴリズムは進化しているため、更新された優先暗号化方法でこの投稿を自由に編集するか、メモに記載してください。更新します.
于 2016-02-25T05:36:45.070 に答える
24

私はこの問題を抱えていましたが、私にとって答えは、この質問に対する他の答えとは異なりました。

多くのお客様からのお申し込みを頂いております。application_error ですべてのエラーをキャッチglobal.asaxし、エラーの詳細を記載したメールを自分に送信します。アプリの新しいバージョンを公開した後、Validation of viewstate MAC failed というエラー メッセージが大量に表示されるようになりました。

1 日検索した後、アプリにタイマーがあり、1 分ごとに更新パネルが更新されることに気付きました。そのため、アプリの新しいバージョンを公開したときに、一部の顧客が自分のコンピューターを開いたまま私の Web サイトにアクセスしたことがあります。実際のビューステートが新しいビューステートと一致しないため、タイマーが更新されるたびにエラー メッセージが表示されます。すべての顧客が Web サイトを閉じるか、ブラウザーを更新して新しいバージョンを取得するまで、このメッセージを受け取りました。

私の英語が下手で申し訳ありません。私のケースが非常に具体的であることは承知していますが、誰かが 1 日を節約するのに役立つなら、それは良いことだと思います。

于 2016-04-15T00:33:57.067 に答える
6

親愛なるすべての回答に敬意を表して、web.configの値が

<httpCookies httpOnlyCookies="true" requireSSL="true"/>

リンクは https ではなく http です

于 2019-04-01T10:17:29.220 に答える
4

マルチサーバー環境では、このエラーは、セッションの有効期限が切れ、アプリケーションの別のインスタンスが同じセッション ID とマシン キーを使用して別のサーバーに再起動された場合に発生する可能性があります。最初に、各サーバーが独自のマシン キーを生成します。このマシン キーは、後でアプリケーションの 1 つのインスタンスに関連付けられます。セッションが期限切れになり、現在のサーバーがビジー状態になると、アプリケーションは、ロード バランサーを介してより稼働しているサーバーにリダイレクトされます。私の場合、複数のサーバーから同じアプリを実行すると、次のエラー メッセージが表示されます。

ビューステート MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。

web.config でマシンコードを定義すると、問題が解決しました。ただし、破損する可能性のあるコード生成にサード パーティのサイトを使用する代わりに、コマンド シェルからこれを実行してください

# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
  [CmdletBinding()]
  param (
    [ValidateSet("AES", "DES", "3DES")]
    [string]$decryptionAlgorithm = 'AES',
    [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
    [string]$validationAlgorithm = 'HMACSHA256'
  )
  process {
    function BinaryToHex {
        [CmdLetBinding()]
        param($bytes)
        process {
            $builder = new-object System.Text.StringBuilder
            foreach ($b in $bytes) {
              $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
            }
            $builder
        }
    }
    switch ($decryptionAlgorithm) {
      "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
      "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
      "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
    }
    $decryptionObject.GenerateKey()
    $decryptionKey = BinaryToHex($decryptionObject.Key)
    $decryptionObject.Dispose()
    switch ($validationAlgorithm) {
      "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
      "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
      "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
      "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
      "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
    }
    $validationKey = BinaryToHex($validationObject.Key)
    $validationObject.Dispose()
    [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
      "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
      $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
      $validationAlgorithm.ToUpperInvariant(), $validationKey)
  }
}

それで:

ASP.NET 4.0 の場合

Generate-MachineKey

キーは次のようになります。<machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />

ASP.NET 2.0 および 3.5 の場合

Generate-MachineKey -validation sha1

キーは次のようになります。<machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />

于 2015-06-05T10:04:58.827 に答える
0

このエラーメッセージは通常、Webサイトをサーバーに公開した後に表示されます。

主な問題は、Webサイトに使用するアプリケーションプールにあります。

Webサイトに関連するアプリケーションプールの[一般]セクションで、適切な.NET Frameworkバージョン(つまりv4.0)を使用するようにWebサイトを構成します。

[プロセスモデル]で、[ID]の値を[ネットワークサービス]に設定します。

ダイアログボックスを閉じてWebサイトを右クリックし、コンテンツメニューの[Webサイトの管理]オプションから[詳細設定...]を選択します。ダイアログボックスの[全般]セクションで、使用するアプリケーションプールの適切な名前を選択していることを確認します。

これで、Webサイトは問題なく実行されます。

これがこのエラーの克服に役立つことを願っています。

于 2012-09-07T20:50:30.430 に答える
0

これと同じ問題があり、並べ替えが有効になっているページの Gridview (vb コードから生成された) が原因でした。Sort を無効にすると問題が解決しました。SQLdatasource を使用して作成されたグリッドビューでは、この問題は発生しません。

于 2016-04-28T13:30:42.093 に答える
0

ビューステート MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、<machineKey>構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。AutoGenerate はクラスタでは使用できません。

答え :

<machineKey  decryptionKey="2CC8E5C3B1812451A707FBAAAEAC9052E05AE1B858993660" validation="HMACSHA256" decryption="AES" validationKey="CB8860CE588A62A2CF9B0B2F48D2C8C31A6A40F0517268CEBCA431A3177B08FC53D818B82DEDCF015A71A0C4B817EA8FDCA2B3BDD091D89F2EDDFB3C06C0CB32" />

于 2016-02-20T05:19:56.157 に答える
0

私の顧客に起こっていた別のシナリオがあります。これは、シフトの変更とユーザーが別のユーザーでログインする必要があるため、特定の時間に正常に発生していました。偽造防止システムがこのエラーを生成してシステムを保護するシナリオを次に示します。

1-ブラウザを閉じて/開いたら。2- Web サイトにアクセスし、「ユーザー A」でログインします。 3- ブラウザで新しいタブを開き、同じアドレスのサイトを入力します。(認証なしでサイトのホームページを表示できます) 4- サイトからログアウトし、2 番目のタブで別のユーザー (ユーザー B) でログインします。5- 「ユーザー A」がログインした最初のタブに戻ります。ページは引き続き表示されますが、このタブで何らかの操作を行うとエラーが発生します。Cookie は「ユーザー B」によって既に更新されており、無効なユーザーからリクエストを送信しようとしているためです。(ユーザーA)

于 2018-09-04T07:41:27.327 に答える