Преобразование ASP.NET MVC4 SPA AntiForgeryToken в PhoneGap

У меня есть приложение SPA, которое использует некоторые функции ASP.NET MVC4, такие как AntiForgeryToken.

Я не знаю, как реализовать функциональность AntiForgeryToken в HTML без использования CSHTML, который не поддерживается в Phonegap?




Ответы (2)


Текущая реализация токена AntiForgery в ASP.NET MVC опирается на вспомогательную функцию HTML, которая создает скрытое поле ввода и устанавливает файл cookie. Если вы не можете использовать этот хелпер, вам придется накатывать эту функциональность самостоятельно.

person Darin Dimitrov    schedule 20.02.2013
comment
Привет Дарин. Спасибо за быстрый ответ. Проблема в том, что если я хочу развернуть приложение в PhoneGap, я не могу использовать ASP.NET MVC. Знаете ли вы, как реализовать эту функциональность, не полагаясь на сервер для генерации HTML? - person Radenko Zec; 20.02.2013
comment
Вы не можете реализовать эту функциональность без скрипта на стороне сервера. Это не имеет никакого смысла. Весь смысл токена защиты от подделки состоит в том, чтобы иметь сервер, который генерирует этот токен. - person Darin Dimitrov; 20.02.2013
comment
В ПОРЯДКЕ. У меня есть идея создать простую HTML-страницу, которая сделает запрос AJAX к некоторому методу в ASP.NET WebAPI, который сгенерирует токен и вернет его клиенту. Чем я могу использовать этот токен в своем следующем запросе к WebAPI? Что-то такое. Что вы думаете ? - person Radenko Zec; 20.02.2013
comment
У вас не может быть простой HTML-страницы. Вам нужно включить какое-то динамическое значение в этот текст HTML, который генерируется сервером. - person Darin Dimitrov; 20.02.2013
comment
Да, но потом оказывается, что я не могу использовать функциональность AntiForgeryToken с PhoneGap... - person Radenko Zec; 20.02.2013
comment
Да, именно об этом я и говорю :-) - person Darin Dimitrov; 20.02.2013

Я думаю, что есть безопасный способ реализовать токен защиты от подделки без страницы, сгенерированной сервером:

  1. Создайте контроллер или метод веб-API, который устанавливает файл cookie только для HTTP с вашим значением маркера защиты от подделки и возвращает значение маркера защиты от подделки (в формате JSON). Существует общедоступный метод AntiForgery.GetTokens(), который вызывается ссылкой Html.AntiForgeryToken(). Используйте этот метод для чтения значения маркера в коде C#.
  2. Вызовите метод контроллера или веб-API (на шаге 1) из javascript в приложении phonegap, возьмите возвращенный маркер защиты от подделки и добавьте его в форму с помощью javascript (используйте скрытое поле ввода с именем _RequstVerificationToken).
  3. Отправьте форму методу с атрибутом [ValidateAntiForgeryToken], и он должен пройти соответствующую проверку.

Microsoft предоставила очень похожий пример реализации здесь (см. раздел «Анти-CSRF и AJAX»).

На первый взгляд это может показаться небезопасным, потому что у вас есть метод контроллера, который устанавливает и возвращает маркер защиты от подделки, но веб-браузеры применяют такая же политика безопасности, поэтому XSRF атаки не должны быть возможным.

Поскольку phonegap использует локальные файлы, на него не распространяется политика того же источника (см. здесь), поэтому сможет делать запросы AJAX к любому домену, указанному в вашем config.xml (см. ‹access origin= "..." /› здесь)

person gregjhogan    schedule 06.10.2013