2011-02-23 5 views
0
내가 할 노력하고있어

: 나는 Devpay S3 버킷을 표시하기 위해 노력하고있어
. 내가 사용- 점점 "SignatureDoesNotMatch"오류

참고 :
1 http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html
2 http://docs.amazonwebservices.com/AmazonDevPay/latest/DevPayDeveloperGuide/QuickReferenceS3Products.html
3. http://docs.amazonwebservices.com/AmazonDevPay/2007-12-01/DevPayDeveloperGuide/DesktopAWSCalls.html

내가하고 있어요 방법 : PHP를 사용하여
간단한 REST GET 요청 libcURL 라이브러리 :

GET/HTTP/1.1 
Host: s3.amazonaws.com 
Date: $date 
X-Amz-Date: $date 
X-Amz-Security-Token: $userToken, $productToken 
Authorization: $signatureValue 

$date // = timestamp at the time of request 

$signatureValue //= Authorization: AWS $signature 

$signature //= $userAccessKey:$signatureString 

$signatureString //=base64 encoded HMAC-SHA1 of $stringToSign with $userSecretKey 

$stringToSign //= utf8 encoded string: 

이 문자열 - 나는 GET 요청을 실행하는 curl_exec()을 사용하고

GET\n 
""\n 
""\n 
$date\n 
$canonicalized_AMZ_Headers\n 
/

. 내가 갖는

오류 :

"SignatureDoesNotMatch"

"우리는 당신이 제공하는 서명과 일치 키와 서명 방법을 확인하지 않는 계산 요청 서명."

고마워요!
어떤 도움을 주시면 감사하겠습니다.

답변

1

S3에서 반환되는 오류 메시지는 StringToSign 요소가됩니다 (더 자세히 보려면 ​​소스보기를 사용하십시오). 이 값을 신중하게 추가 할 문자열과 비교하여 — 정확히이어야합니다.

+0

S3에서 반환 한 서명 할 문자열에 '$ date'가 없었기 때문에 제거했습니다. 아마존이 반환 한 '$ stringToSign'과 StringToSign을 비교해 보면, 둘 다 똑같은 것처럼 보입니다. 죄송 합니다만 오류 : ( –

+0

서명 된 S3 URL은 __always__에 만료 시간을 포함해야하며 만료 시간도 검색어 매개 변수로 설정해야합니다. [인증 페이지] (http://docs.amazonwebservices.com/AmazonS3/latest /dev/RESTAuthentication.html) 자세한 내용은 PHP 사용자 (또는 Devpay 사용자 중 하나)가 아니지만 AWS는 [PHP SDK] (http://aws.amazon.com/sdkforphp/)를 제공합니다.) 어쨌든 대부분의 돌봐야한다 .HHH. –

+0

감사합니다. 우리는 서명 된 URL을 사용하지 않습니다. x-amz-date 헤더를 제외하고 정기적 인 Date :를 포함하여이 문제를 해결할 수있었습니다. .. "헤더 대신 .2 개의 보안 토큰을 정규화 된 형식이 아닐 경우 별도로 나열해야합니다. ps php sdk는 불행히도 devpay s3 버킷에서 작동하지 않습니다. –