Внедрение (безопасное) Api Keys в приложении

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

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

Дело в том, что я обеспокоен аспектом безопасности. Поскольку ключ Api будет отправлен на наш сервер (через GET / POST и т. Д.), Кто-то может обнюхать запрос с помощью wirehark и получить ключ API разработчиков без особых усилий, не так ли?

Я думал о создании секретного ключа и ключа API. Затем я мог бы поручить другим разработчикам конкатенировать их и отправить хэш этого API. Затем я подтвердил бы, что хэш действителен и разрешает запрос … Но тогда та же проблема будет сохраняться. Хакер все еще мог нюхать этот хэш и делать запросы от имени приложения другого разработчика.

Поэтому мои вопросы

  • Как я могу избежать этой проблемы?
  • Или еще лучше, действительно ли моя забота? Это настоящая проблема?
  • Есть ли лучший и безопасный способ доступа к моей информации, не делая его слишком сложным для других разработчиков?

Ребята, что вы думаете?

Я думаю, вы пытаетесь решить кучу разных вопросов.

Если ваша цель – ограничить количество запросов на ваш сервер, вы должны создать механизм дросселирования. Это нетривиально, но я бы основывал его на IP-адресе, а не на лицензионном ключе – один лицензированный пользователь мог бы загружать вашу систему с большим количеством запросов. Вы можете дросселировать по IP-адресу без реализации лицензионного механизма.

Если вы хотите создать схему лицензирования, вам нужно понять криптографию и т. Д. – это нетривиальная проблема. Например, как вы запрещаете законному пользователю делиться своим лицензионным ключом со всеми своими друзьями? Как остановить хакера от кражи вашего ключа и поделиться им со всеми своими друзьями?

Есть ряд решений для этого – все они накладывают определенную боль на ваших пользователей. Например, вы можете запустить службу на HTTPS; это останавливает snooping, но снижает производительность. Вы можете выдавать «токены» для своего сервиса, срок действия которых истекает после определенного количества использований; Получение новых токенов требует криптографического обмена (который может проверить ваш IP-адрес). Вам может потребоваться логика типа «вызов / ответ» (включая проверку IP-адреса). Все эти шаги делают жизнь более трудной для ваших пользователей; они, вероятно, не будут вам благодарны за дополнительную работу, которую они должны выполнить.

Что касается нюха, ваша проблема может быть решена с помощью HTTPS на вашем сервере.

это определенно имеет смысл поставить некоторую аутентификацию в API, если вы хотите ограничить доступ + потенциал некоторых ограничений скорости использования. Если вы используете ключ API и хотите избежать обнюхивания, то HTTPS, безусловно, способ пойти. Если это не вариант, вы также можете использовать хэш-стиль auth, например oAuth 1.0 (http://oauth.net/core/1.0/) или аутентификацию Amazon AWS. Они работают, выпуская пользователей API с идентификатором и секретом. Они используют секрет на стороне клиента, вставляя его в тело сообщения, вычисляя хэш и включающий хэш (а не секрет) в запросе. На входящей стороне вы сравниваете хэш с той же самой операцией, выполненной над содержимым сообщения, с указанием их секретности.

Это означает, что вы можете проверить отправителя, не отправляя секрет по кабелю (обратите внимание, что контент все еще не защищен), но вы избегаете пропускать ключ по кабелю с каждым запросом). Недостатком является то, что разработчикам сложно реализовать. Даже если вы используете шаблон oAuth 1.0, в котором есть библиотеки, это немного накладные расходы.

Я работаю в 3scale, и некоторые из наших инструментов также могут быть полезны – наши системы предоставляют API-ключи, oAuth Secret, а также ограничения скорости API из коробки (http://www.3scale.net и библиотеки PHP: https : //github.com/3scale/3scale_ws_api_for_php ).