JQuery $ .ajax.post к сервису с секретным ключом API - PullRequest
4 голосов
/ 20 мая 2011

давайте предположим, что существует служба, как показано ниже:

http://exmaple.com/service1/GetSomething?apikey={api-key-goes-here}

мой ключ API: 96a143c8-2f62-470c-b81f-dec5fc271873

, поэтому мы будем вызывать ссылку> http://exmaple.com/service1/GetSomething?apikey=96a143c8-2f62-470c-b81f-dec5fc271873, и она возвращает ответ в виде JSON.

, когда я использую его с JQuery (или любым другим клиентским JavaScriptбиблиотека), как этот ключ будет в безопасности?Я думаю об этом и решил, что нет пути.Если я собираюсь позвонить в эту службу с помощью вызова на стороне клиента, он будет нашим открытым.

есть идеи по этому поводу?

спасибо.

Ответы [ 3 ]

9 голосов
/ 20 мая 2011

Сделать прокси.

Отправьте значения на одну из ваших страниц и с этой страницы сделайте реальный запрос на стороне сервера, а затем верните полученное значение.

Примечание: Вы не можете сделать междоменный запрос с помощью javascript, в основном браузеры не разрешают это по соображениям безопасности.

2 голосов
/ 20 мая 2011

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

0 голосов
/ 23 мая 2013

Лучший подход, который я нашел, - дать вашему пользователю API_KEY и SECRET_KEY.

Создайте свой запрос API REST, передав API_KEY, отметку времени и любые другие параметры, необходимые для совершения вызова.

Используя язык сценариев, такой как PHP, создайте переменную API_SIGNATURE, используя двухстороннее шифрование с вашим SECRET_KEY, и добавьте это к своему базовому URL, и это то, что вы запускаете в качестве запроса.

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

Пример: (выполнить эту часть на языке сценариев)

$API_BASE_URL="http://api.yourdomain.com/1.1/comments.json?api_key=2002&timestamp=2323234544&id=4";
$API_KEY=300;
$API_SIGNATURE=hash_hmac('sha256', API_BASE_URL, API_KEY);
$API_URL=$API_BASE_URL.'&api_signature='.$API_SIGNATURE;

-

Теперь в вашем jquery ajax url: выведите $ API_URL с помощью PHP.

-

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

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

Вот так.


Также люди говорят, что браузеры не допускают кросс-доменные запросы. Это верно, если вы запрашиваете json, но вы можете обойти это, используя jsonp.


hash_hmac доступен на многих языках программирования и сценариев. Поэтому, если вы разрабатываете API, вы можете использовать его в Интернете с PHP и в своем приложении для iphone с целью c.

Довольно просто.

...