Обрабатывать токен AntiForgery в Winform и WebAPI
Какой самый лучший способ борьбы с подделкой на методах с ValidateAntiForgeryTokenAttribute
атрибут при звонке из не-браузера клиента, скажем WinForm
?
Исходя из того, что я знаю, ниже показано, как работает анти подделка:
На страницу добавлено скрытое поле ввода, например
Файл cookie с тем же именем также отправляется клиенту
При следующем запросе файл cookie и скрытое поле ввода отправляются на сервер. Сервер звонков
AntiForgery.Validate(token, cookie)
подтвердить, что запрос является законным.
Все отлично работает в веб-приложении. Кажется, он не работает в WinForm. Вот что я делаю:
- С помощью
HttpClient
Я попадаю на страницу, содержащую токен. - Я анализирую страницу и хватаю скрытое поле ввода. Я также забираю печенье.
- Я передаю печенье как есть. Кроме того, я добавляю новый заголовок
__RequestVerificationToken
со значением из скрытого поля. - Я вхожу в код сервера.
-
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 со значением из предыдущего шага.