Проблемы с подписью в Php, приводящие к сбою аутентификации API

Я пытаюсь получить список IP-адресов с помощью Verizon Cloud REST API.

Несмотря на то, что все значения верны, я не могу подтвердить подлинность по некоторым причинам, которые я не могу найти

Вот ссылка на документацию — http://cloud.verizon.com/documentation/CloudAPIAuthentication.htm

Если я делаю что-то здесь не так … потому что он всегда возвращает мне запрещенный доступ 403 ошибка доступа, тогда как он должен возвращать 401 для меня.

<?php

ini_set('error_reporting', E_ALL);
{
//Access Key and Secret Key
$accesskey="XXXXX";
$secretkey="XXXXXXXX";

//Generating a Authorization Header data
$method = 'GET';
$host = 'https://api.cloud.verizon.com/';
$HTTPVerb = "GET";
$ContentType = "";
$CanonicalizedAmzHeaders = "";
$time=time();
$CanonicalizedResource = "api/compute/ip-address";

$string_to_sign = $HTTPVerb . "\n" .$ContentType."\n".$time ."\n".$CanonicalizedAmzHeaders."\n".$CanonicalizedResource;
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secretkey, TRUE));
$request = 'accesskey='.$accesskey.'<BR>signaturetype=HmacSHA256<BR>signature='.$signature;
$authorization='CloudApi '.$request;

//Generating header data for x-tmrk-date and x-tmrk-noonce
date_default_timezone_set("GMT");
$date=date("D d F Y H:i:s", time())." GMT";
$noonce=time();

//auth

// Generating requests
include('./httpful.phar');
$uri='https://sjca1.cloud.verizon.com/api/';

//Sending Headers
$response = \Httpful\Request::options($uri)
->addHeaders(array(
'Accept'=>'application/vnd.terremark.ecloud.root.v1+json',
'x-tmrk-authorization' => $authorization,
'x-tmrk-date' => $date,
'x-tmrk-nonce' => $noonce,
'Authorization' => $authorization,
'Date' => $date,
))
->send();
echo "<pre>";
echo $response;

}
?>

1

Решение

Из вашего примера это не похоже на то, как вы канонизируете заголовки. Следуйте инструкциям здесь. http://cloud.verizon.com/documentation/CloudAPISignatureGeneration.htm#o5461

Канонизированные заголовки требуются только при использовании x-tmrk-date. В противном случае используйте пустую строку.
1. Восстановите все поля заголовка для ресурса, которые начинаются с «x-tmrk-», за исключением поля заголовка x-tmrk-authorization, если оно есть.
2. Преобразуйте каждое имя поля заголовка HTTPS в нижний регистр.
3.Сортируйте поля заголовка лексикографически по имени поля заголовка в порядке возрастания. Обратите внимание, что каждый заголовок может появляться только один раз в строке.
4. Разверните строку, заменив все пробельные символы одним пробелом.
5. Уберите все пробелы вокруг двоеточия в поле заголовка.
6. Добавьте символ новой строки к каждому канонизированному полю заголовка в результирующем списке.
7.Связать все заголовки в этом списке в одну строку как строку CanonicalizedHeaders.

Построение строки CanonicalizedResource

Эта строка подписи является строкой ресурса в нижнем регистре. Например:
/ API / вычислить / VM

Следуйте строке с параметрами, как описано в следующей процедуре.
1.В качестве источника для CanonicalizedResource используйте декодированный URL-адрес ресурса, преобразованный во все строчные буквы.
2. Добавьте путь URI ресурса, эту часть вызова после URI и перед любыми параметрами запроса (параметры запроса URI — это часть URI после знака вопроса, «?»), За которым следует символ новой строки (‘\ н ‘) характер.
3. Получить все параметры запроса по URL ресурса.
Совет: разделите параметры запроса, используя символ амперсанда «&». Например, [? [Offset = x] [&предел = у]]

4. Преобразуйте все имена параметров в нижний регистр.
5.Сортируйте параметры запроса лексикографически по имени параметра в порядке возрастания.
6. Добавьте каждое имя и значение параметра запроса в строку по порядку в следующем формате, убедившись, что между именем и значением стоит двоеточие (:), за которым следует символ новой строки после каждой пары имя-значение:
имя-параметра: параметр-значение \

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]