我正在尝试使用AWS签名版本4向S3提交请求。
当我提交请求时,我收到了消息
The request signature we calculated does not match the signature you provided. Check your key and signing method.
我不知道从哪里开始。我尝试了几种不同的哈希算法(sha1,md5)但总是得到相同的响应。我已经验证了访问密钥和密钥。我刚刚在AWS上创建了一对新的,它仍然失败。
感谢任何帮助!
<?php
$date = date('Ymd');
$x_date = $date . "T000000Z";
$credential = AWS_ACCESS_KEY . '/' . $date . '/us-west-2/s3/aws4_request';
$redirect = 'https://roofscope.com/scope/thank-you';
$conditions = array(
array('bucket' => 'tracescope'),
array('starts-with', '$key', 'user/user1/'),
array('acl' => 'public-read'),
array('success_action_redirect' => $redirect),
array("starts-with", "\$Content-Type", "image/"),
array("x-amz-credential" => $credential),
array("x-amz-algorithm"=> "AWS4-HMAC-SHA256"),
array("x-amz-date" => $x_date),
);
$policy_b64 = $this->aws->getPolicy(3600 * 24, $conditions);
$signature = hash_hmac('sha256', $policy_b64, AWS_SECRET_KEY);
?>
<form action="http://tracescope.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="input" name="key" value="test/${filename}"/><br/>
<input type="hidden" name="acl" value="public-read"/>
<input type="hidden" name="success_action_redirect" value="<?= $redirect; ?>"/>
<input type="input" name="Content-Type" value="image/jpeg"/><br/>
<input type="text" name="X-Amz-Credential" value="<?= $credential; ?>"/>
<input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256"/>
<input type="text" name="X-Amz-Date" value="<?= $x_date; ?>"/>
<input type="hidden" name="Policy" value="<?= $policy_b64; ?>" />
<input type="hidden" name="X-Amz-Signature" value="<?= $signature; ?>"/>
<input type="file" name="file"/> <br/>
<input type="submit" name="submit" value="Upload to Amazon S3"/>
</form>
&#13;
答案 0 :(得分:1)
尝试使用我的s3策略签名验证程序。 请不要输入您的实际密钥。 使用示例键并测试您身边的示例键的计算。
http://ttwd80.github.io/s3postcalculatorverify/
有一个“显示/隐藏步骤”链接,可以逐步解释该过程。