hash — ключи API для REST

Поэтому я разрабатываю RESTful API, но не могу понять, как работают ключи API. Я использую PHP, который имеет функцию HMAC, и я прочитал, что это хороший способ подписывать запросы, но я не понимаю, как это сделать.

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

2

Решение

Посмотрите, как это делается компаниями, которые широко используют API. Хороший пример Google или же Dropbox.

Вы увидите, что в какой-то момент есть некоторая информация,

  • либо получить из какого-то места (в случае с Google — Консоль API) и использовать как часть аутентификации (обычно это ключ, который вы упоминаете); обычно используется для связи между приложениями
  • или используйте протокол аутентификации на основе пользователя, такой как OAuth.

В вашем случае нужно выбрать oAuth, где пользователи сами ничего не хранят (для них есть cookie, но они об этом не знают). Затем вы можете использовать сторонние системы (Google, Twitter, LinkedIn, …) для проверки подлинности от вашего имени.

1

Другие решения

Ключ API обычно используется для идентификации среды / привилегий для конкретного пользователя в многопользовательской среде.

скажем, у вас есть приложение, в котором у вас есть три клиента A, B и C. Все три клиента имеют совершенно разные настройки / используют разные функции и т. д.

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

1

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

0
По вопросам рекламы [email protected]