我试图调用Amazon route53的'ChangeResourceRecordSetsRequest'
API,但每次都会得到"缺少身份验证错误"。我不确定我在这里做错了什么。有人能看一下吗?以下是我的代码:
$AWSAccessKeyId = "##########";
$SecretAccessKey = "#################";
$Timestamp = gmdate('D, d M Y H:i:s') . ' GMT';
$Signature = base64_encode(hash_hmac("sha256",$Timestamp,$SecretAccessKey));
$AuthenticationToken = "AWS3-HTTPS AWSAccessKeyId=".$AWSAccessKeyId.", Algorithm=HmacSHA256,Signature=".$Signature;
$headers = array(
'X-Amzn-Authorization: $AuthenticationToken',
'x-amz-date: $Timestamp',
'Content-Type: text/xml;charset=utf-8',
);
$endpoint = 'https://route53.amazonaws.com/2012-12-12/hostedzone/######/rrset';
$session = curl_init($endpoint); // create a curl session
curl_setopt($session, CURLOPT_POST, true); // POST request type
curl_setopt($session, CURLOPT_POSTFIELDS, $xmlRequest); // set the body of the POST
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // return values as a string - not to std out
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
$responseXML = curl_exec($session);
看起来$AuthenticationToken
中有一个额外的空间。逗号和"算法"之间不应该有一个逗号。除此之外,我看不出还有什么看起来不对的地方。
然而,我建议使用AWS SDK为PHP提供的Route53客户端,因为他们已经实现并测试了身份验证方案,如果未来服务的身份验证方案发生变化,他们将保持最新状态。