2015-05-28 10 views
13

Mam wyszukiwane w Internecie od ponad dwóch dni, i prawdopodobnie przejrzałem większość udokumentowanych online scenariuszy i obejść, ale jak dotąd nic nie działało dla mnie.Jak naprawić "Obliczony przez nas podpis żądania nie zgadza się z błędem podpisu?

Jestem na AWS SDK dla PHP V2.8.7 z PHP 5.3. Próbuję połączyć się z S3 wiadra z następującego kodu:

// 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(); 
     } 
     // 

Mój plik config.php jest następujący:

<?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' 
       ) 
      ) 
     ) 
    ) 
); 

Jest produkujących następujący błąd:

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

Sprawdziłem już mój klucz dostępu i tajny klucz, co najmniej 20 razy, wygenerowałem nowe, użyłem różnych metod przekazywania informacji (tj. Profilu i wpisywania poświadczeń w kodzie), ale w tej chwili nic nie działa.

+1

W związku z tym pakiet AWS SDK implementuje kilka bezpośrednich wywołań interfejsu API. Dzięki AWS każde wykonane połączenie przyjmuje klucz prywatny (lub 'secret' powyżej) i używa go do obliczania podpisu na podstawie klucza dostępu, bieżącego znacznika czasu oraz wielu innych czynników. Zobacz http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html. Jest to długi, ale biorąc pod uwagę, że zawierają sygnaturę czasową, być może czas twojego lokalnego środowiska jest wyłączony? –

Odpowiedz

18

Po dwóch dniach debugowania, ale w końcu odkrył problem ...

Kluczem byłem przypisanie do obiektu rozpoczął się okres tj .. \ Images \ abc.jpg, a to przyczyną błędu do pojawić się.

Życzę, aby interfejs API zapewniał bardziej znaczący i trafny komunikat o błędzie, niestety, mam nadzieję, że pomoże to komuś innemu!

+4

Chciałbym, żeby to działało dla mnie :( – vcardillo

3

Otrzymuję ten błąd z nieprawidłowymi danymi uwierzytelniającymi. Myślę, że były tam niewidoczne postacie, kiedy wklejałem je pierwotnie.

2

Miałem ten sam problem, gdy próbowałem skopiować obiekt z niektórymi znakami UTF8. Poniżej znajduje się przykład 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); 

rozwiązywane przez kodującego copysource z encodeURIComponent()

0

Właściwie w Javie i był coraz samego spędzeniu error.After 4 godziny do debugowania to co znalazłem, że problem był w meta dane w obiektach S3, ponieważ w plikach s3 było miejsce podczas ustawiania kontrolek pamięci podręcznej. To miejsce było dozwolone w wersji 1.6. *, ale w wersji 1.11. * jest niedozwolone, a zatem zgłaszano błąd niezgodności podpisu:

0

Miałem podobny błąd , ale wydaje mi się, że spowodowało to ponowne wykorzystanie użytkownika IAM do pracy z S3 w dwóch różnych Elastic Bean środowiska łodygowe. Wyjaśniłem ten objaw przez tworząc identycznie uprawnionego użytkownika IAM dla każdego środowiska i to spowodowało, że błąd zniknął.

0

Jeśli żadna z drugiej wymienionej rozwiązanie działa dla Ciebie, a następnie spróbuj użyć

aws configure 

this command otworzy zestaw opcji prośbą o klucze, regionu i formatu wyjściowego.

Mam nadzieję, że to pomoże!

0

Po prostu doświadczyłem tego, przesyłając obraz do S3 za pomocą pakietu SDK AWS z React Native. Okazało się, że jest spowodowane parametrem ContentEncoding.

Usunięcie tego parametru "naprawiło" problem.

Powiązane problemy