2012-04-23 17 views
7

मैं अमेज़ॅन एस 3 और क्लाउडफ्रंट - Link के लिए एक PHP कक्षा का उपयोग कर रहा हूं। लेकिन जब मैं एक बाल्टी में फ़ाइल अपलोड करने का प्रयास करता हूं, तो मुझे यह त्रुटि मिलती है:हस्ताक्षरDoesNotMatch - अमेज़ॅन एस 3 एपीआई

[SignatureDoesNotMatch] The request signature we calculated does not match the signature you provided. Check your key and signing method.

इसे कैसे ठीक करें?

धन्यवाद।

उत्तर

8

जब आप अमेज़ॅन के लिए साइन अप करते हैं, तो आप स्वयं को एक प्रमुख जोड़ी बना सकते हैं (अमेज़ॅन उन एक्सेस कुंजी आईडी और गुप्त पहुंच कुंजी को कॉल करता है)।

उन दोनों का उपयोग अमेज़ॅन के वेबसाइकिलों पर अनुरोधों पर हस्ताक्षर करने के लिए किया जाता है। अमेज़ॅन हस्ताक्षर की गणना करता है और तुलना करता है यदि यह आपके अनुरोध में निहित किसी से मेल खाता है। इस तरह गुप्त पहुंच कुंजी को नेटवर्क पर कभी भी प्रसारित करने की आवश्यकता नहीं होती है।

यदि आपको "हस्ताक्षर मेल नहीं खाता" मिलता है, तो यह अत्यधिक संभावना है कि आपने गलत गुप्त पहुंच कुंजी का उपयोग किया है। क्या आप यह सुनिश्चित करने के लिए एक्सेस कुंजी और गुप्त पहुंच कुंजी को दोबारा जांच सकते हैं कि वे सही हैं?

+0

धन्यवाद! इस समस्या को कैसे ठीक करें - http://goo.gl/QTdm4 –

+0

@ रोमन-नाज़र्किन तो मुद्दा बाल्टी स्थान था? – awendt

+1

मेरे मामले में कॉन्फ़िगरेशन फ़ाइल/सेटिंग में कुछ अतिरिक्त व्हाइटस्पेस था जिसमें गुप्त कुंजी थी, इसलिए यह "पासवर्ड" में एक अतिरिक्त 'टैब' वर्ण प्रसारित कर रहा था, इस प्रकार हस्ताक्षर को अमान्य कर रहा था। – drzaus

4

व्यक्तिगत रूप से मुझे यह मेटा डेटा में वर्णित वर्णों के कारण यह त्रुटि मिली।

समस्याग्रस्त चरित्र "-" chracter था जो "\ u2013" यूनिकोड में है और "-" के लिए अलग है।

$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'Metadata' => [ 
     'name' => 'Terminology – Blah' 
    ] 
)); 

प्रलेखन http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata से एक नोट ...

Amazon S3 stores user-defined metadata in lowercase. Each name, value pair must conform to US-ASCII when using REST and UTF-8 when using SOAP or browser-based uploads via POST.

+1

ditto - मेटाडेटा को किसी कुंजी पर 'कैश-कंट्रोल' के साथ जोड़ते समय पहले से मेटाडेटा कुंजी 'कैश-कंट्रोल' है, मुझे यह त्रुटि मिलती है। – Joscha

0

मैं जब एक Key को निर्दिष्ट स्लेश चरित्र (/) के साथ शुरू putObject() के साथ इस त्रुटि थी - स्लैश यह काम किया हटाने के बाद ठीक।