2012-05-30 3 views
1

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

При взгляде на другие API многие из них имеют возможность отправлять имя пользователя и пароль в качестве параметра GET через соединение HTTPS. Это лучший способ сделать это? Или есть другие методы, которые я должен рассмотреть или рассмотреть?

Я видел, как OAuth был брошен вокруг, и это похоже на хорошее решение, но просто для простого API это слишком сложно?

+0

Являются ли текущие ответы (un) удовлетворительными? Прошло несколько месяцев с тех пор, как вы задали этот вопрос без каких-либо отзывов от вас. –

ответ

0

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

0

Обычно это достигается с помощью печенья.

клиент отправляет свое имя пользователя и пароль с POST запроса на ваш API (сделать не использовать GET, это небезопасно). Если учетные данные приемлемы, затем создайте случайный уникальный ключ сеанса, сохраните его на своей стороне и отправьте его в файл cookie обратно клиенту (см. setcookie()).

Когда клиент отправляет дальнейшие запросы, они отправляют cookie сеансового ключа с запросом. Проверьте $_COOKIE на ключ сеанса, если он соответствует сохраненному ключу на вашей стороне; если да, это означает, что пользователь аутентифицирован.

Обратите внимание, что этот минимальный пример уязвим для атак грубой силы, пытаясь угадать действительные ключи сеанса. Вам необходимо зарегистрировать недействительные ключи, которые клиенты отправляют в свои файлы cookie и блокируют их IP-адрес в течение некоторого периода времени, чтобы предотвратить это.

0

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

Я не уверен, когда Вы находитесь в России, но:

  • Если пользователи являются бизнес-клиентами somekind, которые встраивание некоторого типа виджета или коды на другом сайте, то это, вероятно, лучше всего использовать ключ API, который привязан к домену реферера (как это делает Google Maps).

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

Чтобы получить кучу этого материала из коробки, вы можете использовать что-то вроде 3scale (http://www.3scale.net), и он будет работать с большинством из него для вас (отказ от ответственности, я работаю там так подстраиваются для предвзятости!), или есть библиотеки с открытым исходным кодом для oAuth на большинстве языков (в PHP компонент Zend-OAuth может выполнить эту работу для вас).

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