Поместите ключ API в заголовки или URL - PullRequest
68 голосов
/ 01 апреля 2011

Я разрабатываю открытый API для данных моей компании.Мы хотим, чтобы разработчики приложений подписались на ключ API, чтобы мы могли отслеживать использование и чрезмерное использование.

Поскольку API является REST, я сначала решил поместить этот ключ в специальный заголовок.Вот как я видел, как Google, Amazon и Yahoo делают это.Мой начальник, с другой стороны, считает, что API проще в использовании, если ключ становится просто частью URL и т. Д.принцип URL как простой адрес того, что вы хотите, а не как или почему вы этого хотите.

Было бы логичным ввести ключ в URL? Или вы бы предпочли не устанавливать вручнуюЗаголовки HTTP, если вы пишете простой интерфейс javascript для некоторых данных?

Ответы [ 5 ]

63 голосов
/ 01 апреля 2011

Должен быть указан в заголовке HTTP Authorization. Спецификация здесь https://tools.ietf.org/html/rfc7235

59 голосов
/ 02 апреля 2011

Если вам нужен аргумент, который может понравиться боссу: подумайте, что такое URL. URL общедоступны. Люди копируют и вставляют их. Они делятся ими, они помещают их в рекламу. Ничто не мешает кому-то (сознательно или нет) рассылать этот URL-адрес для использования другими людьми. Если ваш ключ API находится в этом URL, он есть у всех.

11 голосов
/ 24 февраля 2015

Лучше использовать API Key в заголовке, а не в URL.

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

Двумя способами вы можете использовать API Key в заголовке

Базовое разрешение:

Пример из полосы:

curl https://api.stripe.com/v1/charges -u sk_test_BQokikJOvBiI2HlWgH4olfQ2:

curl использует флаг -u для передачи базовых учетных данных (добавление двоеточия после того, как ваш ключ API не даст вам запрашивать пароль).

Пользовательский заголовок

curl -H "X-API-KEY: 6fa741de1bdd1d91830ba" https://api.mydomain.com/v1/users
2 голосов
/ 01 апреля 2011

Я бы не стал вводить ключ в URL, так как он нарушает этот свободный «стандарт», то есть REST. Однако, если бы вы это сделали, я бы поместил его в пользовательскую часть URL.

Например: http://me@example.com/myresource/myid

Таким образом, его также можно передавать как заголовки с basic-auth.

1 голос
/ 15 июля 2017

Передача ключа API в параметрах затрудняет сохранение секретности их API-ключей, они имеют тенденцию к утечке ключей на регулярной основе. Лучше всего передать его в заголовке запроса url. Вы можете установить заголовок ключа пользователя в своем коде. Для тестирования URL-адреса вашего запроса вы можете использовать приложение Postman в Google Chrome, установив заголовок пользовательского ключа в свой API-ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...