我想創建授權簽名訪問IAM安全API網關端點。簽名版本4 PHP簽名過程訪問API網關端點
$alg = "SHA256";
$CanonicalRequest = "GET\n/dev/pets\n\nhost:3r4fgts8e5.execute-api.ap-northeast-1.amazonaws.com\nx-amz-date:".$dd."\n\nhost;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
$CR = str_replace("\n", "", $CanonicalRequest);
$CR = str_replace("\r", "", $CR);
$CR = strtolower($CR);
$StringToSign = "AWS4-HMAC-SHA256\n".$dd."\n".$date->format('Ymd')."/ap-northeast-1/execute-api/aws4_request\n".hash($alg, $CR)."";
// 1) HMACs
$kSecret = 'AWS4' . $secret_key;
$kDate = hash_hmac($alg, $date->format('Ymd'), $kSecret, true);
$kRegion = hash_hmac($alg, $region, $kDate, true);
$kService = hash_hmac($alg, $service, $kRegion, true);
$kSigning = hash_hmac($alg, 'aws4_request', $kService, true);
$signature = hash_hmac($alg, $StringToSign, $kSigning);
$authorization = array(
'Credential=' . $access_key . '/' . implode('/', $scope),
'SignedHeaders=' . implode(';', array_keys($can_headers)),
'Signature=' . $signature,
);
$authorization = $request['algorithm'] . ' ' . implode(',', $authorization);
$request['Authorization'] = $authorization;
但我正在逐漸「我們出的要求籤名不匹配您提供的簽名」錯誤
「消息」:「我們出的要求籤章不符您所提供 簽名。請檢查您的AWS訪問密鑰和簽名 方法。有關詳情請諮詢服務文檔。\ n \ n此 此請求規範化字符串應該有 被\ n 'GET \ n的/ dev /寵物的\ n \ n主機:3r4fgts8e5.execute-api.ap-northeast-1.amazonaws.com \ NX-AMZ-日期:20161002T231640Z \ n \ n主機; X-AMZ-日期\ ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' \ ñ\ n此 字符串到註冊應具備 一直\ n'AWS4-HMAC-SHA256 \ n20161002T231640Z \ n20161002/AP-東北-1 /執行的API/aws4_request \ n0b8c12e0a5f21137c5739a9d26056dfb081218631a9adcf37db1d2e09a014c4e'\ n」個
我字符串到符號字符串是
"AWS4-HMAC-SHA256
20161002T231640Z
20161002/ap-northeast-1/execute-api/aws4_request
fb4f7ebdcb405bceed598ecc097267b929eeb3f8f075b1b7a776f53c8c8c6168"
這與AWS預期的簽名完全不同。 「這是從什麼AWS預計在簽名完全不同的」
*所以,你有你的答案 - 你的代碼是不是建設的正確規範的字符串,因此它可以不可能建立正確的字符串來簽名,也不能產生正確的簽名。您的下一步行動似乎很清晰 - 請查看文檔並更正您的代碼以生成正確的中間值。請注意錯誤消息中出現了兩次「** should be been」**字樣。 AWS無法確定您實際使用的值 - 簽名是不可逆的 - 他們只能計算您應該使用的*。 –
做工精細現在:) –
@pravesh:我也越來越相同的問題,你能分享工作的代碼只是增加 – sas