Защитите свой API с помощью ключа API

Я создаю свой собственный API, который используется:

1) Android-приложение 2) Настольное приложение

Один из моих URL-адресов таков: http://api.chatapp.info/order_api/files/getbeers.php, из которого мои пользователи получают данные из моей базы данных через JSON. В последнее время я думал о создании аутентификации с помощью ключа API.

Любые идеи о том, как это сделать? Или мне нужно сделать что-то вроде http://api.chatapp.info/order_api/files/getbeers.php?api_key=, а затем сравнить метод GET с некоторым ключом, хранящимся в моей базе данных?

Любые идеи?

Ответ 1

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

Можно подумать, что вы определенно не хотите включать ключ API в URL. Это очень легко воспроизвести и/или подделать и идентифицировать прокси и зафиксировать в файлах журналов. Лучшим решением является включение ключа API в качестве дополнительного HTTP-заголовка в ваш запрос и поиск этого конкретного значения в конечной точке API.

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

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

Ответ 2

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

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

  • Клиент запрашивает токен доступа с сервера API путем передачи "api-key" и своего рода "секретного ключа". Они предоставляются вашему пользователю API, когда они регистрируются для использования вашего API.

  • Если учетные данные, переданные серверу API с клиента, верны, сервер API отвечает "токеном доступа". Этот токен доступа подходит для определенного количества времени и должен быть отправлен со всеми последующими запросами, чтобы доказать, что клиенту был предоставлен доступ для использования API.

  • Клиент выполняет запрос API для данных с вашего сервера API и должен включать "токен доступа". Если "токен доступа" включен и остается в силе (т.е. Не истек), вы можете ответить запрошенными данными.

Вот несколько ссылок на ресурсы, которые помогут вам узнать, как реализовать OAuth в вашем API.

Документы OAuth

http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ http://www.devx.com/webdev/create-your-own-rest-api-using-oauth-authentication.html

См. эту ссылку для сравнения OAuth 1.0 и OAuth 2.0, чтобы определить, что лучше использовать в вашем случае.

Ответ 3

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