0

PHPを使用してAPIのEC2 v2署名を正常に生成した人がいるかどうか疑問に思っています。私がオンラインで見つけることができるすべての例/ライブラリは、署名の v1 用であり、安全でないために非推奨になっています。署名生成を実装する既存のライブラリも高く評価されます。

4

4 に答える 4

1

http://mierendo.com/software/aws_signed_query/

V2だと思います

于 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');

これにより、ListDomainsSimpleDB でクエリが実行されます。関数自体は 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 に答える