2009-05-11 5 views
35

У меня есть простой REST JSON API для других веб-сайтов/приложений для доступа к некоторым базам данных моего сайта (через шлюз PHP). В основном сервис работает следующим образом: call example.com/fruit/orange, сервер возвращает информацию JSON об апельсине. Вот проблема: мне нужны только сайты, на которые я разрешаю обращаться к этой службе. С помощью простой ключевой системы API любой веб-сайт может быстро получить ключ, скопировав ключ из кода клиентской стороны авторизованного веб-сайта (потенциально). Я посмотрел на Оата, но это кажется немного сложным для того, что я делаю. Решения?Простая, безопасная система аутентификации API

+0

HTTP-аутентификация по протоколу HTTPS. – Petah

ответ

4

Если чей-то код на стороне клиента взломан, он должен получить новый ключ. Там не так много, если их код подвергается.

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

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

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

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

2

В принципе у вас есть два варианта: либо ограничить доступ по IP, либо иметь ключ API, обе опции имеют свои положительные и отрицательные стороны.

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

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

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

28

Вы должны использовать OAuth.

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

Хорошей новостью является то, что версия с 2-мя нотами делает именно то, что вы хотите, она позволяет приложению предоставлять доступ к другому через общий секретный ключ (очень похожий на модель веб-службы Amazon, вы будете использовать HMAC- SHA1) или через систему открытого/закрытого ключа (используйте метод подписи: RSA-SHA1). Плохая новость заключается в том, что она пока еще не поддерживается так же, как версия с тремя ногами, поэтому вам, возможно, придется немного поработать, чем вам в противном случае.

В принципе, OAuth 2-legged указывает только способ «подписать» (вычислить хэш) несколько полей, которые включают текущую дату, случайное число, называемое «nonce», и параметры вашего запроса. Это делает очень сложным, чтобы олицетворять запросы к вашему веб-сервису.

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

Это более сложный, чем вы изначально хотели бы получить, но хорошая новость заключается в том, что многие люди потратили на это много времени, поэтому вы знаете, что ничего не забыли. Отличным примером является то, что в последнее время Twitter обнаружил разрыв в безопасности OAuth, который сообщество в настоящее время работает над закрытием. Если бы вы изобрели свою собственную систему, вам нужно все это выяснить самостоятельно.

Удачи вам!

Крис

21

OAuth не решение здесь.
OAuth - это когда у вас есть конечные пользователи и вы хотите, чтобы сторонние приложения не обрабатывали пароли конечных пользователей. Когда использовать OAuth: http://blog.apigee.com/detail/when_to_use_oauth/

Go для простой апи ключ.
Примите дополнительные меры, если есть необходимость в более безопасном решении.

Вот еще информация, http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

+0

LOL: ссылка на blog.apigee.com нарушена и отображается «Доступ запрещен: у вас нет доступа к этой странице». Но это с 2009 года в любом случае, поэтому не уверен, насколько релевантна информация ... – auco

+1

Вот ссылка на интернет-архив, если кто-то все еще интересуется (я все еще думал, что это так): https://web.archive.org/web/ 20140708081525/https: //blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization – Gerard

0

Все производства IP-безопасности, кажется, производит гигантскую ошибку для пользователей перед тем, как связаны между собой. Symbian 60s в полной мере способна оставлять нетрадиционный, надежный и безопасный сигнал среди множества пользователей (применяя интерфейс Opera Handler UI 6.5, Opera Mini v8 и 10) вместе с кодированным пользовательским интерфейсом +, полностью заполненную сетевую настройку. Зачем ограничивать другие функции, когда, наконец, получается метод обнаружения метода быстрого доступа. Сохранение более идентифицированных учетных записей, надлежащий контроль за этой «истинной учетной записью» - если они соблюдают соблюдение требований к оплате счетов и зная, имеет ли пользователь неизменный баланс обслуживания, создаст более быструю связь интернет-сигнала с популярным/подписным мобильным телефоном промышленность. Зачем создавать жесткие функции безопасности перед тем, как получить их на сайт, ежемесячный визит на их учетные записи может стереть все проблемы с подключением? У всех пользователей мобильных устройств не должно быть возможности «подключиться», если у них есть неоплаченные счета.Почему бы не предоставить «ALL in One» -Registration/Application account, запрограммированную с ОС (возможно, учетную запись электронной почты) вместо «возможности мониторинга», если они платят или нет (проблемы с паролями) другому отделу). И если «не» выключить их учетную запись в точности и их другие возможности ссылок. У каждого из них есть свои интересы, чтобы каждый день заходить на крючок, если вы заблокировали/отключили их из-за неоплаченных счетов, которые могут инициировать их, чтобы повторно подписаться и дисциплинировать их больше, чтобы стать более ответственными пользователями и которые могут даже истечь если аккаунт не поддерживается. Ежемесячный мониторинг или доступ к идентифицированной «истинной учетной записи» при совместной работе с сетевым провайдером дает более высокую конфиденциальность, а не всегда запрашивает имя пользователя и пароль, «местоположение», «разрешения» для просмотра своих служб передачи данных. IP помечены уже своей первой личностью или «находят местоположение пользователей», поэтому кажется, что он не обязательно размещать его в предварительных поисках браузеров, почему бы не использовать «Получение данных» или «Обработка данных».

+0

Возможно, вы захотите перестроить свой ответ на блоки, чтобы улучшить читаемость. – Jendas

Смежные вопросы