1

AzureにデプロイされているMVCアプリケーションにValidateAntiForgeryTokenを実装しています。

1)メインページに@ Html.AntiForgeryToken()を追加しました。

2)Jquery$.Postを使用してPostアクションのデータを送信しています。コードは次のとおりです。

   `var token = $('[name=__RequestVerificationToken]').val();

    var url = '/XX/YYYY/';
        $.post(url, { __RequestVerificationToken: token,reportname: reportName},
        function (data) { window.navigate(data.url) }
        );`

トークンをサーバーに渡し、フィドラーで確認しました。CookieとHidden変数がサーバーに渡されます。

3)アクションを[HttpPost]と[ValidateAntiForgeryToken]に帰した

これは、AzureのDEV環境では完全に機能しますが、別の環境に移動すると失敗し、「必要な偽造防止トークンが提供されなかったか、無効でした」という例外がスローされます。

隠れた変数の値とCookie変数の値が異なることを確認しました。私の開発環境でも同じですが、開発環境では機能しますが、テストでは機能しません。この例外をトラブルシューティングする方法を提案してください。

構成は、DEVサイトとTESTazureサイトで同じです。

4

1 に答える 1

0

ValidateAntiForgeryTokenAttributeクラスをソリューションに複製し、ほとんどのクラスが封印されているか内部であるため、この属性クラスに必要なヘルパーメソッドを追加することで、問題を突き止めることができました。したがって、紺碧の環境で完全に機能するためには、コードをコピーしていくつかの変更を行う必要があります。基本的に、問題は

AntiForgeryData.GetUsername(context.User)

このメソッドはuserNameにnullがあることを返すので、次のように変更しました

 string currentUsername = AntiForgeryData.GetUsername(context.User) ?? string.Empty;

その後、完全に機能し始めました。Azureでは、validateAntifogeryで早期に発生する設定が最近発生したため、これにより私の問題が修正されます。

于 2012-08-07T06:01:28.927 に答える