2015-05-28 23 views
13

Tôi đã tìm kiếm trên web trong hơn hai ngày nay và có thể đã xem xét hầu hết các kịch bản và cách giải quyết được ghi lại trực tuyến, nhưng không có gì làm việc cho tôi cho đến nay.Cách khắc phục 'Chữ ký yêu cầu mà chúng tôi đã tính không khớp với lỗi chữ ký'?

Tôi đang sử dụng AWS SDK cho PHP V2.8.7 chạy trên PHP 5.3. Tôi cố gắng để kết nối với xô S3 của tôi với đoạn mã sau:

// Create a `Aws` object using a configuration file 

     $aws = Aws::factory('config.php'); 

     // Get the client from the service locator by namespace 
     $s3Client = $aws->get('s3'); 

     $bucket = "xxx"; 
     $keyname = "xxx"; 

     try { 
      $result = $s3Client->putObject(array(
       'Bucket'  =>  $bucket, 
       'Key'   =>  $keyname, 
       'Body'   =>  'Hello World!' 
      )); 
      $file_error = false; 
     } catch (Exception $e) { 
      $file_error = true; 
      echo $e->getMessage(); 
      die(); 
     } 
     // 

tập tin config.php của tôi là như sau:

<?php 

return array(
    // Bootstrap the configuration file with AWS specific features 
    'includes' => array('_aws'), 
    'services' => array(
     // All AWS clients extend from 'default_settings'. Here we are 
     // overriding 'default_settings' with our default credentials and 
     // providing a default region setting. 
     'default_settings' => array(
      'params' => array(
       'credentials' => array(
        'key' => 'key', 
        'secret' => 'secret' 
       ) 
      ) 
     ) 
    ) 
); 

Nó được sản xuất lỗi sau:

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

Tôi đã kiểm tra khóa truy cập và bí mật của mình ít nhất 20 lần, tạo khóa mới, sử dụng các phương thức khác để truyền thông tin (tức là hồ sơ và bao gồm thông tin đăng nhập mã) nhưng hiện tại không có gì hoạt động.

+1

Vì vậy, AWS SDK chỉ triển khai một loạt các cuộc gọi API trực tiếp. Với AWS, mọi cuộc gọi bạn thực hiện đều lấy khóa riêng tư của bạn (hoặc 'bí mật' ở trên) và sử dụng để tính chữ ký dựa trên khóa truy cập của bạn, dấu thời gian hiện tại, cộng với một loạt các yếu tố khác. Xem http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html. Đó là một thời gian dài, nhưng cho rằng họ bao gồm dấu thời gian, có lẽ thời gian của môi trường địa phương của bạn là tắt? –

Trả lời

18

Sau hai ngày gỡ lỗi, tôi cuối cùng đã phát hiện ra vấn đề ...

Mấu chốt Tôi đã gán cho đối tượng bắt đầu với một khoảng thời gian tức là .. \ images \ ABC.jpg, và điều này gây ra lỗi để xảy ra.

Tôi muốn API cung cấp thông báo lỗi có ý nghĩa và có liên quan hơn, than ôi, tôi hy vọng điều này sẽ giúp người khác ra khỏi đó!

+4

Tôi ước rằng đã làm việc cho tôi :( – vcardillo

3

Tôi gặp lỗi này với thông tin đăng nhập sai. Tôi nghĩ rằng có những nhân vật vô hình khi tôi dán nó ban đầu.

2

Tôi đã gặp vấn đề tương tự khi cố sao chép một đối tượng có một số ký tự UTF8. Dưới đây là một ví dụ JS:

var s3 = new AWS.S3(); 

s3.copyObject({ 
    Bucket: 'somebucket', 
    CopySource: 'path/to/Weird_file_name_ðÓpíu.jpg', 
    Key: 'destination/key.jpg', 
    ACL: 'authenticated-read' 
}, cb); 

giải quyết bằng cách mã hóa các CopySource với encodeURIComponent()

0

Trên thực tế trong Java tôi đã nhận được chi tiêu cùng error.After 4 giờ để gỡ lỗi nó những gì tôi phát hiện ra rằng vấn đề là ở meta dữ liệu trong S3 đối tượng như có không gian trong khi ngồi điều khiển bộ nhớ cache trong các tập tin s3. Không gian này được cho phép trong phiên bản 1.6. * nhưng trong 1.11. * nó không được phép và do đó đã ném lỗi chữ ký không khớp

0

Tôi đã có lỗi tương tự , nhưng đối với tôi nó dường như được gây ra bởi việc tái sử dụng một người dùng IAM để làm việc với S3 trong hai chiếc Elastic Bean khác nhau môi trường stalk. Tôi đã xử lý các triệu chứng bằng cách tạo một người dùng IAM được cho phép một cách giống hệt cho mỗi môi trường và điều đó làm cho lỗi biến mất.

0

Nếu không ai trong số các giải pháp được đề cập khác làm việc cho bạn, sau đó hãy thử sử dụng

aws configure 

this command sẽ mở ra một tập hợp các tùy chọn yêu cầu phím, khu vực và định dạng đầu ra.

Hy vọng điều này sẽ hữu ích!

0

Tôi vừa trải nghiệm việc tải hình ảnh lên S3 bằng cách sử dụng SDK AWS với React Native. Hóa ra là do tham số ContentEncoding.

Xóa thông số đó "cố định" sự cố.

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