PHPを使用してAPIのEC2 v2署名を正常に生成した人がいるかどうか疑問に思っています。私がオンラインで見つけることができるすべての例/ライブラリは、署名の v1 用であり、安全でないために非推奨になっています。署名生成を実装する既存のライブラリも高く評価されます。
2330 次
4 に答える
1
于 2009-11-25T00:34:04.927 に答える
0
これが私が書いて使用しているコードです。
define("AWSKEY", "Your AWS Key");
define("AWSSECRET", "Your AWS Secret");
public function get($parameters, $host) {
// Build out the variables
$domain = "https://$host/";
$parameters['AWSAccessKeyId'] = AWSKEY;
$parameters['Timestamp'] = date('c');
$parameters['Version'] = '2007-11-07';
$parameters['SignatureMethod'] = 'HmacSHA256';
$parameters['SignatureVersion'] = 2;
// Write the signature
$signature = "GET\n";
$signature .= "$host\n";
$signature .= "/\n";
$sigparams = $parameters;
ksort($sigparams);
$first = true;
foreach($sigparams as $key=>$param) {
$signature .= (!$first ? '&' : '') . rawurlencode($key) . '=' . rawurlencode($param);
$first = false;
}
$signature = hash_hmac('sha256', $signature, $AWSKEY, true);
$signature = base64_encode($signature);
$parameters['Signature'] = $signature;
$url = $domain . '?';
$first = true;
foreach($parameters as $key=>$param) {
$url .= (!$first ? '&' : '') . rawurlencode($key) . '=' . rawurlencode($param);
$first = false;
}
$ch = curl_init(trim($url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
return $output;
}
使用方法は次のとおりです。
$params = array(
'Action' => 'ListDomains'
);
$db->get($params, 'sdb.amazonaws.com');
これにより、ListDomains
SimpleDB でクエリが実行されます。関数自体は Amazon の出力を返します。より複雑なコマンド (つまり、PUT、POST など) の場合、大きな変更を加える必要はありません。
于 2009-11-25T00:25:09.743 に答える
0
$AWSKEY (参照されない変数) ではなく、定数 AWSSECRET を使用して署名をハッシュします。
于 2012-05-13T07:28:53.407 に答える
0
V2 をサポートする PHP ライブラリは次のとおりです。私はそれを試していません。
于 2009-04-08T00:04:56.030 に答える