2017-08-04 11 views
0

でAWS APIゲートウェイからAPIにアクセスする誰もがAPIゲートウェイAPIにアクセスするためにAWS署名、AWSの資格情報とPHP SDK 3を使用する方法を見つけ出す手助けすることはできますか? AWS Signatureは実際にGuzzleリクエストにヘッダーを添付しないようです。はどのようにPHP SDK 3

ここ

私のコードは次のとおりです。

<?php 

require 'vendor/autoload.php'; 

use Aws\Credentials\Credentials; 
use GuzzleHttp\Client; 
use GuzzleHttp\Psr7\Request; 
use Aws\Signature\SignatureV4; 

$access_key = '<access_key>'; 
$secret_key = '<secret_key>'; 
$url = 'https://<api-id>.execute-api.us-east-1.amazonaws.com/v1/camel?q=*'; 
$region = 'us-east-1'; 

$credentials = new Credentials($access_key, $secret_key); 
var_dump($credentials); 

$client = new Client(); 
$request = new Request('GET', $url); 
var_dump($request); 

$s4 = new SignatureV4("execute-api", $region); 
$s4 = new SignatureV4("execute-api", "us-east-1"); 
$s4->signRequest($request, $credentials); 
var_dump($s4); 
var_dump($request); 

$response = $client->send($request); 

そして、私は取得していますエラーは次のとおりです。access.phpのの

(!) Fatal error: Uncaught exception 
'GuzzleHttp\Exception\ClientException' with message ' in 
/path/to/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on 
line 113 

(!) GuzzleHttp\Exception\ClientException: Client error: `GET 
https://<api-id>.execute-api.us-east-1.amazonaws.com/v1/camel?q=*` 
resulted in a `403 Forbidden` response: {"message":"Missing 
Authentication Token"} in 
/path/to/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on 
line 113 
Call Stack 
# Time Memory Function Location 
1 0.0002 234048 {main}() ../access.php:0 
2 0.2801 486272 GuzzleHttp\Client->send() ../access.php:29 
3 0.3787 574224 GuzzleHttp\Promise\Promise->wait() ../Client.php:106 

29行目は次のとおりです。

$response = $client->send($request); 

それはdoesnのvar_dumpから、どのヘッダも追加されているように見えます。 APIゲートウェイとPostmanでこのエンドポイントを正常にテストできました。 CORSを有効にしても違いはありません。

は、誰もが、まだこの問題を解決しましたか?

この問題はhttps://forums.aws.amazon.com/post!reply.jspa?messageID=795522https://forums.aws.amazon.com/thread.jspa?messageID=774631&tstart=0でも扱いますが、そこに解決策はありません。

+0

'$ s4-> signRequest()は本当にvoidコンテキストで呼び出されるはずですか、それとも戻り値がありますか? –

+0

あなたは正しいです、それは戻り値を持っています。私は密接に十分な(http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest)のドキュメントを読んでいません。 – pzzd

+0

素敵な仕事です。どこから探し始めたいかを示唆するものではありません。私は実際には解答を知っていませんでしたが、破棄された戻り値のようなものを見るたびに、真実/偽の合格/不合格であっても、エラーメッセージを取得するために他の何かを問い合わせる必要がある指示。この場合、すべての署名情報が追加された新しい要求。 –

答えて

1

おかげで、マイケル、上記のあなたの助けのために。

あなたは、変更した応答である新しいSignatureV4、からのリターンを使用する必要があります。