3

ValidateAntiForgeryTokenAttributeブラウザー以外のクライアントから呼び出しているときに、属性を持つメソッドの偽造防止に対処する最良の方法は何WinFormですか?

私が知っていることに基づいて、以下は偽造防止の仕組みです。

  1. 非表示の入力フィールドがページに追加されます。

  2. 同じ名前の Cookie もクライアントに送信されます

  3. 次のリクエストで、Cookie と非表示の入力フィールドの両方がサーバーに送信されます。サーバーはAntiForgery.Validate(token, cookie)、要求が正当であることを確認するために呼び出します。

Web アプリではすべて正常に動作します。WinForm では動作しないようです。これが私がすることです:

  1. を使用しHttpClientて、トークンを含むページにアクセスします。
  2. ページを解析し、非表示の入力フィールドを取得します。クッキーも拾います。
  3. そのままクッキーを渡します。その上に__RequestVerificationToken、非表示フィールドの値を含む新しいヘッダーを追加します。
  4. サーバーコードにステップインします。
  5. AntiForgery.Validate(xx,yy)エラーで失敗します: 提供された偽造防止トークンはユーザー X 向けでしたが、現在のユーザーは Y です。
4

1 に答える 1

3

私はそれを考え出した。フォーム認証を事前に実行し、後続の WebAPI 呼び出しで Cookie を渡す必要があります。修正後のフローは次のとおりです。

1) HttpWebRequest (GET) を使用してログイン フォームを読み込む

2) 資格情報を使用して、ログイン フォームで POST を実行します。HttpWebRequestで cookiecontainer を指定してください

3) cookiecontainer に Auth Cookie と __RequestVerificationTokenが含まれるようになりました

4) 後続の GET から、またはログイン結果の出力から __RequestVerificationToken を取得します。

5) WebAPI Post 呼び出しの場合、cookiecontainer をそのまま渡します。前の手順の値を含むヘッダー__RequestVerificationToken も含めます。

于 2013-01-23T21:51:58.793 に答える