База знаний

Авторизация запроса

ID статьи: 389
Последнее обновление: 20 дек., 2020

API базы знаний KBPublisher требует, чтобы вы аутентифицировали каждый запрос, подписывая его. Чтобы подписать запрос, вычислите цифровую подпись, используя криптографическую хеш-функцию. Хеш-функция возвращает хеш-значение, которое вы включаете в запрос в качестве подписи.

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

Для дополнительной безопасности рекомендуется передавать свои запросы по протоколу SSL (Secure Sockets Layer), используя HTTPS. SSL шифрует передачу, защищая запрос или ответ от просмотра при пересылке.

Аргументы для авторизации запроса

Для любого запроса API базы знаний KBPublisher необходимо включить 3 аргумента. Это позволит вам авторизировать запрос.
Ниже описано как генерируется каждое значение:

accessKey
Параметр accessKey определяет, кто делает запрос.
Получить это значение можно со страницы учетной записи в папке установки KBPublisher. Перейдите в Панели администратора: Мой аккаунт ->Настройки API -> Публичный ключ API.

timestamp
Параметр timestamp показывает, когда был создан запрос. В параметре задается число секунд (по Unix-времени), когда был сгенерирован запрос, и это значение должно легко генерироваться на большинстве языков программирования. API будет отклонять запросы, которые были созданы в слишком отдаленном прошлом, поэтому важно поддерживать синхронизацию запросов компьютера с NTP.

signature
Параметр подписи содержит значение, которое генерируется путем запуска всех других параметров запроса и секретного значения с помощью алгоритма подписи. Цель подписи заключается в том, чтобы KBPublisher мог проверить, что запрос не изменился при пересылке, проверить приложение, отправляющее запрос, и убедится, что приложение имеет авторизацию для взаимодействия с API.

Генерация подписи

Чтобы создать подпись, начните с определения метода HTTP и URL-адреса запроса.

  • Метод запроса почти всегда будет GET или POST для запросов API KBPublisher.
    Метод HTTP ‒ GET

  • Основной URL-адрес ‒ это URL-адрес, на который отправлен запрос, минус протокол ("http://" или "https://") и любая строка запроса.
    URL ‒ domain.com/kb_directory/api.php 

Затем соберите все параметры GET, входящие в запрос. Эти значения должны быть закодированы в одну строку, которая будет использоваться позже. Процесс построения строки очень специфичен:

  • Отсортируйте список параметров по алфавиту с помощью ключа.
  • Объедините параметры в строку следующим образом: key=value&key2=value2... и т.д.
  • Закодируйте URL-строку параметров.

Наконец, подпись вычисляется путем передачи базовой строки подписи и ключа подписи к алгоритму хеширования HMAC-SHA1 и добавляется к запросу. Реализация HMAC-SHA1 доступна для каждого популярного языка. Например, PHP имеет функцию hash_hmac.

  • $signature = rawurlencode(base64_encode(hash_hmac("sha1", $string_to_sign, $secret_api_key, true)));
     

Пример подписи запроса в PHP

// define api keys
$public_api_key = '1bcf89471d8df298cb6546b1f1da6c8c';
$secret_api_key = '718143f5faw978d6acf5b83c105c27c4';

// collect parameters 
$params = array();
$params[call] = 'articles';
$params['accessKey'] = $public_api_key;  // public API key here 
$params['timestamp'] = time();
$params['version'] = 1; // optional
$params['format'] = 'json'; // optional

// params to string
ksort($params);
$string_params = http_build_query($params, false, '&');

// collect to string 
$string_to_sign = "GET\n";
$string_to_sign .= "domain.com/kbp_dir/api.php\n"; // api url without protocol
$string_to_sign .= "/\n";
$string_to_sign .= $string_params;

// create signature
$signature = rawurlencode(base64_encode(hash_hmac("sha1", $string_to_sign, $secret_api_key, true)));

// add signature to request string 
$string_params .= '&signature=' . $signature;

// ctreate request
$request = 'https://domain.com/kb_dir/api.php?' . $string_params;

Запрос для приведенного выше примера будет выглядеть следующим образом:

http://domain.com/kbp_dir/api.php?accessKey=1bcf89471d8df298cb6546b1f1da6c8c&
call=articles&format=json&timestamp=1385669114&
version=1&signature=LYfL2odFOS4hyJkI5uAZJGD%2BdEM%3D
Эта статья была:   Полезна | Не полезна
ID статьи: 389
Последнее обновление: 20 дек., 2020
Ревизия: 10
Доступ: Открытый доступ
Просмотры: 3761
Комментарии: 0