我正在尝试使用Verizon Cloud REST API获取IP地址列表。
尽管所有值都是正确的,但由于某些我无法找到的原因,我无法进行身份验证
以下是文档的链接 - 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;
} ?&GT;
答案 0 :(得分:0)
从您的示例中,它看起来不像是标准化标题。请按照此处的步骤进行操作: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.使用转换为全部小写的资源的解码URL作为CanonicalizedResource的源。 2.Andnd资源的URI路径,在URI之后和任何查询参数之前的那部分调用(URI的查询参数是问号之后的URI的一部分,“?”),然后是换行符('\ n')性格。 3.检索资源URL上的所有查询参数。 提示:使用&符号“&amp;”分隔查询参数。例如,[?[offset = x] [&amp; limit = y]]
4.将所有参数名称转换为小写。 5.按参数名称按升序顺序按字典顺序排序查询参数。 6.按顺序,按以下格式将每个查询参数名称和值附加到字符串中,确保在名称和值之间包含冒号(:),后跟每个名称 - 值对后面的换行符: 参数名:参数值\