Поместить ключ API в заголовки или URL-адрес

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

Поскольку API является REST, моя первоначальная мысль состоит в том, чтобы поместить этот ключ в пользовательский заголовок. Вот как я видел Google, Amazon и Yahoo. С другой стороны, мой босс считает, что API проще в использовании, если ключ просто становится частью URL и т.д. "Http://api.domain.tld/longapikey1234/resource". Я думаю, есть что сказать об этом, но это как бы нарушает принцип URL-адреса как простой адрес того, что вы хотите, а не как и почему вы хотите.

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Основная авторизация:

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

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

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

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

curl -H "X-API-KEY: 6fa741de1bdd1d91830ba" https://api.mydomain.com/v1/users

Ответ 4

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

например: http://[email protected]/myresource/myid

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

Ответ 5

Передача параметров api в параметрах затрудняет клиентам сохранение своих секретных ключей APIkey, они имеют тенденцию к утечке ключей на регулярной основе. Лучший подход - передать его в заголовок запроса url.you можете установить заголовок пользовательского ключа в вашем коде. Для тестирования вашего запроса Url вы можете использовать приложение Postman в google chrome, установив заголовок пользовательского ключа на ваш api-ключ.