7

Tôi đang phát triển mã cho lực lượng bán hàng. Chúng tôi đang sử dụng ứng dụng 'Force.com cho Amazon Web Services' từ Appexchange. Ứng dụng được cung cấp bởi Amazon.Amazon S3: Lỗi lạ - 'Đôi khi' SignatureDoesNotMatch, đôi khi nó

Tôi đang tải xuống tệp từ Amazon S3 trên máy.

Đôi khi tôi nhận được lỗi được đề cập dưới đây. Điều thú vị là, đôi khi tôi nhận được lỗi này, phần còn lại của thời gian nó hoạt động, ngay cả đối với cùng một tập tin.

<Error> 
<Code>SignatureDoesNotMatch</Code> 
<Message> 
The request signature we calculated does not match the signature you provided. Check your key and signing method. 
</Message> 

Tôi đã thử sử dụng cả hai mẫu URL do Amazon cung cấp. Hết hạn được đặt cho 1 giờ sau khi tạo liên kết, do đó có thể không phải là vấn đề.

URL1:- http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ= 
URL2:- http://s3.amazonaws.com/adminportal/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372658253&Signature=%2FmI0m0PTlHJpJ%2FP5d%2FX3OApqzcI%3D 

Chữ ký được tạo bởi lớp do Amazon cung cấp, tôi đoán nó phải hoạt động tốt mọi lúc.

Ai đó có thể giải thích tại sao S3 chỉ cung cấp lỗi này đôi khi?

Trả lời

10

Cuối cùng tôi đã có thể giải quyết vấn đề này, đây là cách thực hiện?

URL mẫu cho tập tin trên Amazon S3 là-

http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ= 

Ở đây Chữ ký được tạo ra bởi các lớp học được cung cấp bởi Amazon.

Vì lý do không xác định, ứng dụng 'Force.com cho Amazon Web Services' đã tạo chữ ký chứa SPACES.

Ví dụ: Trong URL đã cho, dấu cách được thay thế bằng dấu '+'.

Để loại bỏ vấn đề, chỉ cần URL mã hóa chữ ký. Việc mã hóa sẽ thay thế không gian bằng ký tự đặc biệt và vấn đề sẽ được giải quyết.

+1

bạn đã lưu ngày của tôi! – Raeesaa

+1

Bạn có nghĩa là '+' sẽ được thay thế bằng một số ký tự đặc biệt. Tôi có mã này: 'var signature = crypto.createHmac ('sha1', AWS_SECRET_KEY) .update (put_request) .digest ('base64');' 'signature = encodeURIComponent (signature.trim());' ' signature = signature.replace ('% 2B', '+'); ' nên dòng cuối cùng là 'signature = signature.replace (' + ','% 2B ');' hoặc nó sẽ bị xóa? – vinit

+0

Tôi yêu cầu bạn bởi vì nó rất khó để tái tạo các trường hợp thử nghiệm, vì vậy muốn chắc chắn từ bạn. – vinit

0

Bạn có đang sử dụng SDK Java không? Phiên bản nào?

Lỗi đã được giới thiệu trong phiên bản 1.4.4 tôi nghĩ và đã được khắc phục trong các bản phát hành gần đây nhất. Khi tôi nâng cấp lên phiên bản lỗi, tôi đã gặp các vấn đề chữ ký liên tục khi sử dụng SQS và tôi đã thấy một bài đăng trên Diễn đàn AWS của một số người báo cáo cùng một vấn đề chính xác với DynamoDB. Bây giờ tôi đã nâng cấp lên phiên bản 1.4.7 và lỗi đã biến mất.

Có thể bạn đang gặp lỗi tương tự!

+0

Tôi đang phát triển điều này trên Nền tảng Salesforce. Vì vậy, điều này không liên quan đến điều Java như vậy. –

+0

Tôi đang gặp vấn đề tương tự wight trình điều khiển java eh. Tôi có thể thiết lập hai bài kiểm tra gần như giống hệt nhau và một bài kiểm tra, trong khi khác không cùng một lúc trên cùng một máy chủ. –

Các vấn đề liên quan