Лучшие практики для безопасных API? - PullRequest
9 голосов
/ 12 марта 2010

Допустим, у меня есть веб-сайт, на котором много информации о наших продуктах.Я бы хотел, чтобы некоторые из наших клиентов (включая нас!) Могли искать наши продукты для различных методов, включая:

1) Получение данных из вызовов AJAX, которые возвращают данные классным способом JavaScripty-way 2) Создание приложений для iPhone, которые используют эти данные;3) Использование других веб-приложений для этих целей.

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

Моим следующим логическим шагом было бы создание ключа разработчика для ограничения доступа - который бы хорошо работал для веб-приложений, но не так много для любых вызовов AJAX.(На мой взгляд, им нужно будет предоставить ключ в JavaScript, который находится в открытом тексте и легко просматривается, и, следовательно, на самом деле безопасности вообще нет. Особенно, если бы мы использовали собственные ключи разработчиков на нашем сайтечтобы сделать эти AJAX-вызовы.)

Итак, мой вопрос: посмотрев на Oauth и OpenID в течение некоторого времени, я не уверен, что есть решение, которое справилось бы со всеми тремя из вышеперечисленных.Существуют ли какие-то канонические «передовые практики» для ключей разработчиков, или Oauth и OpenID могут легко обрабатывать вызовы AJAX так, как мне еще предстоит, или я что-то упустил полностью?

Ответы [ 3 ]

5 голосов
/ 12 марта 2010

Я думаю, что двухсторонний OAuth - это то, что вы хотите удовлетворить # 2 и # 3. Для # 1 я бы предложил, чтобы вместо того, чтобы заказчик делал запросы JS напрямую к вашему приложению, он мог вместо этого прокси-запросы через свои собственные веб-приложения.

1 голос
/ 14 марта 2010

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

Похоже, что это происходитна вопрос " как мне предотвратить скребок экрана ."Если только зарегистрированные клиенты видят цены, это одно, но при условии, что вы похожи на большинство розничных сайтов, и ваш барьер для регистрации клиентов настолько низок, насколько это возможно, это не очень помогает.

И, эй, если ваши цены не недоступны, вы не увидите их в поисковых системах, таких как Froogle, Nextag или PriceGrabber.Но это скорее решение бизнес-стратегии, а не программирование.

1 голос
/ 12 марта 2010

На полпути решение состоит в том, чтобы требовать ключ API; и затем потребуйте, чтобы тот, кто его использует, не использовал его непосредственно с AJAX; но оберните их вызовы в запрос на стороне сервера, например ::10000

AJAX -> customer server -> your server -> customer server -> user

Создание простого PHP API для заинтересованных сторон не должно быть слишком сложным, и ваши собственные приложения для iPhone, очевидно, откажутся от посредника, поставляя свой собственный ключ API.

...