2012-03-07 5 views
4

Я заметил, что в некоторых API вы передаете ключ API в качестве параметра url, а другие вы передаете его в HTTP HEADER. Я разрабатываю веб-приложение, которое будет в значительной степени полагаться на REST API, и сейчас я просто получаю его, поэтому API KEY проходит как параметр url.Передача ключей API в HEADER или URL?

Мой вопрос в том, является ли один из этих вариантов более безопасным, чем другой?

ответ

5

В обоих случаях ключ API будет передан незашифрованным. Поэтому оба они небезопасны, если вы не используете HTTPS.

На практике, заголовок HTTP оказывается немного более безопасным, потому что -

  1. URL-адрес сохраняется в истории браузера
  2. URL-адрес сохраняется в журналах доступа на стороне сервера

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

EDIT: В ответ на @ Segfault Замечаний -

Пользователь сайта обычно не ввести ключ API. Они вводят свое имя пользователя и пароль, и это продается, чтобы получить ключ API или токен доступа, как его обычно называют.

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

Более конкретно, я имел в виду «Если бэкенд API ожидает, что ключ API, и вы делаете AJAX звонки из браузера, и вы не просите у пользователя какой-то учетные данные, вы не уверены в себе»

+0

Никогда не думал об этом незначительном преимуществе сделать его частью HTTP HEADER, думаю, я сделаю это. В остальном это верно только в том случае, если это HTTP, если API работает на HTTPS, не так легко идентифицировать и красть, а также ключ API. – ryanzec

+0

@ryanzec: re. В стороне - я могу просто проверить сообщение в firebug и извлечь ключ API, даже если вы используете HTTPS. Вы действительно не можете обеспечить REST API только с помощью ключа API. –

+0

Извините, но в стороне просто неправильно. пользователь, который «извлекает ключ api с firebug», является авторизованным пользователем! Это тот же человек, который знал бы свой пароль, если бы вы потребовали от пользователя входа в систему. – Segfault

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