で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=795522とhttps://forums.aws.amazon.com/thread.jspa?messageID=774631&tstart=0でも扱いますが、そこに解決策はありません。
'$ s4-> signRequest()は本当にvoidコンテキストで呼び出されるはずですか、それとも戻り値がありますか? –
あなたは正しいです、それは戻り値を持っています。私は密接に十分な(http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Signature.SignatureV4.html#_signRequest)のドキュメントを読んでいません。 – pzzd
素敵な仕事です。どこから探し始めたいかを示唆するものではありません。私は実際には解答を知っていませんでしたが、破棄された戻り値のようなものを見るたびに、真実/偽の合格/不合格であっても、エラーメッセージを取得するために他の何かを問い合わせる必要がある指示。この場合、すべての署名情報が追加された新しい要求。 –