Обрабатывать токен AntiForgery в Winform и WebAPI

Какой самый лучший способ борьбы с подделкой на методах с ValidateAntiForgeryTokenAttribute атрибут при звонке из не-браузера клиента, скажем WinForm?

Исходя из того, что я знаю, ниже показано, как работает анти подделка:

  1. На страницу добавлено скрытое поле ввода, например

  2. Файл cookie с тем же именем также отправляется клиенту

  3. При следующем запросе файл cookie и скрытое поле ввода отправляются на сервер. Сервер звонков AntiForgery.Validate(token, cookie) подтвердить, что запрос является законным.

Все отлично работает в веб-приложении. Кажется, он не работает в WinForm. Вот что я делаю:

  1. С помощью HttpClient Я попадаю на страницу, содержащую токен.
  2. Я анализирую страницу и хватаю скрытое поле ввода. Я также забираю печенье.
  3. Я передаю печенье как есть. Кроме того, я добавляю новый заголовок __RequestVerificationToken со значением из скрытого поля.
  4. Я вхожу в код сервера.
  5. AntiForgery.Validate(xx,yy) завершается с ошибкой: предоставленный токен защиты от подделки был предназначен для пользователя X, но текущий пользователь - Y.

1 ответ

Решение

Я понял. Требуется предварительная проверка подлинности с помощью форм и передача файлов cookie при последующих вызовах WebAPI. Итак, вот пересмотренный поток:

1) Загрузите форму входа, используя HttpWebRequest (GET)

2) Сделайте POST в форме входа, используя учетные данные. Предоставить контейнер cookie в HttpWebRequest

3) Контейнер cookie теперь содержит файлы cookie Auth и __RequestVerificationToken.

4) Получите __RequestVerificationToken из любого последующего GET или даже из выходных данных в результате входа в систему

5) Для вызова почты WebAPI передайте контейнер cookie как есть. Также включите заголовок __RequestVerificationToken со значением из предыдущего шага.

Другие вопросы по тегам