Подтвердить что ты не робот

Каковы некоторые жизнеспособные методы для объединения защиты CSRF с API RESTful?

Мне интересно узнать, какие подходы люди предпринимали при создании RESTful (или квази-RESTful) API для своих веб-приложений.

Практический пример:

Скажем, у вас есть традиционное веб-приложение на основе браузера, которое использует CSRF-защиту для всех форм. Скрытый ввод с токеном защиты CSRF включен в каждую форму, представленную в браузере. При подаче формы, если этот вход не соответствует версии токена на стороне сервера, форма считается недействительной.

Теперь скажите, что вы хотите открыть веб-приложение как API (возможно, используя JSON вместо HTML). Традиционно при публикации API я рассматривал транзакции как односторонние (это означает, что пользователь API строит запрос на основе опубликованного API вместо того, чтобы сначала запрашивать форму, а затем строить запрос с использованием возвращаемой формы).

"Односторонний" подход разрушается, когда такие факторы, как фактор защиты CSRF. Ключ защиты CSRF должен быть включен в любые POSTS/PUTS/DELETES, отправленные потребителем API.

Я пытался подумать, как лучше всего это решить. Запрос формы каждый раз, когда вызов API должен быть сделан, кажется очень неудобным (особенно при работе с асинхронными операциями), но все другие альтернативы, о которых я думал, по-видимому, побеждают защиту CSRF (или, по крайней мере, дыры в нем), что неприемлемо.

У кого-нибудь из вас есть понимание этого?

Спасибо.

(Не то, чтобы это было слишком важно, поскольку проблема является концептуальной и агностической для платформы, но я имею дело с традиционным стеком LAMP и использую Symfony 1.4 в качестве платформы приложения. Моя цель - опубликовать веб-сайт формата JSON API, позволяющий разработчикам создавать мобильные/настольные приложения, которые хорошо сочетаются с существующим веб-приложением.)

4b9b3361

Ответ 1

REST отлично справляется с аутентификацией (т.е. базовая аутентификация), поэтому попробуйте использовать имя пользователя вашего сайта и пароль для приложения, привязанного к этому пользователю, - техника, иногда называемая ключами API. Что-то, что API FriendFeed делает см. Документацию.

Немного примечаний:

  • использовать дайджест-аутентификацию или SSL
  • наличие ключа API для каждого приложения может быть немного накладными, поэтому большинство сайтов имеют один ключ API для всех сторонних приложений.
  • OAuth может стоить проверить