2017-01-19 2 views
9

У меня есть сайт бронирования, где я предоставляю несколько строк кода пользователю, где я добавляю ключ API в div вместе с кодом. Пользователи должны добавлять эти коды на свой веб-сайт. Затем я загружаю представление с моего сайта на свой сайт с помощью вызовов ajax. Меня беспокоит: как я могу сделать эти вызовы безопасными с помощью открытого и закрытого API-ключа с успокоительными веб-сервисами с помощью codeIgniter?Защита вызовов API от перекрестного домена с использованием службы RESTful

Мой код, предоставленный пользователю выглядит

<link rel="stylesheet" type="text/css" href="http://localhost/bookingpoints_com/apiTesting/styles/first.css" /> 
    <script src="http://localhost/bookingpoints_com/contents/scripts/jquery.js" ></script> 
    <script src="http://localhost/bookingpoints_com/contents/scripts/apiused.js" ></script> 
    <script src="http://localhost/bookingpoints_com/apiTesting/scripts/common.js" ></script>   
    <div id="api-data-reserve" name="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNXRlc3QgY29kZTE=" data="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNW1HVnZ3YVhMRVc=" sitekey="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNQ=="></div> 

На этих строк кода я делаю AJAX вызов на мой сайт и сделать вид на сайте пользователей. Как я могу заставить его работать, как клиентскую и секретную ключевую структуру google с аутентификацией, используя сервисы restful с использованием чистой архитектуры API?

+0

http: // stackoverflow.com/questions/4850702/is-cors-a-secure-way-to-do-cross-domain-ajax-запросы – channasmcs

+0

Если вы хотите использовать Codeigniter и API-ключи с помощью ajax-запросов, подумайте об использовании реализации Rest API, например: https://github.com/chriskacerguis/codeigniter-restserver –

+0

@MicKri Я прошел через него, но озадачен тем, как использовать ключ API, который я предоставил в API-интерфейсе Rest API, а не обновлять его для каждого запроса. –

ответ

2

Facebook, Google и другие крупные компании используют iframe для такого рода услуг.
Примите пример facebook, который дает вам сценарий для ввода кода, который при запуске создает iframe для определенного вида.

Также вы не можете совершать межсайтовые вызовы ajax. Только iframe, загруженный с вашего сайта, может безопасно загружать страницу.

Теперь с помощью ключей вы всегда можете предоставить открытый ключ в скрипте. Iframe href укажет на ваш сайт с $_SERVER['http_referer'], где вы можете убедиться, что ключ api авторизирован. Не используйте закрытый ключ, если вы не собираетесь публиковать конфиденциальные конфиденциальные данные.

2

Запросы Ajax могут быть эмулированы путем создания соответствующих заголовков . Если вы хотите иметь базовую проверку, чтобы увидеть, если запроса является запрос Ajax вы можете использовать:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }, однако вы никогда не должны основывать свою безопасности на этой проверке. Это устранит прямой доступ к странице , если это то, что вам нужно.

Но этого недостаточно, вам нужно защитить свой вызов Ajax, используя скрипты на стороне сервера (например, PHP). Например, если ваш AJAX передает ключ в файл PHP, напишите код в файле PHP, чтобы убедиться, что это правильный ключ.

2

Я недавно написал статью о защите API REST, особенно тех, которые были использованы браузером. Я рекомендую посмотреть https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

Auth0, у провайдера аутентификации есть немало ресурсов, у меня нет аффилированности, кроме использования их раньше и как их продукта.

Многие API-интерфейсы защищены через JWT, которые хороши, так как позволяют аутентифицировать вызов API без централизованных серверов auth. Они основаны на общедоступных/частных криптоалгоритмах, где два ключа связаны математически. Ключи создаются в надежной среде, такой как ваш сервер, но каждый может проверить, что они происходят от того, кого они говорят. Вы можете разработать другие схемы токенов аутентификации.

В зависимости от того, что вам нужно, ключи будут доступны любому клиенту, поэтому вы можете создать определенную модель разрешений для обеспечения того, чтобы ключ имел права наименьших привилегий (то есть у них не было прав администратора и т. Д.)