web-dev-qa-db-ja.com

RESTクライアントPOSTMANを使用してAPIキーでAWS APIゲートウェイエンドポイントを呼び出す

バックエンドとしてaws lambdaおよびdynamo dbを使用しているモバイル/ Webアプリを開発しています。スタンドアロンのラムダ関数は完全に機能しています。呼び出しは、APIゲートウェイ経由でルーティングされています。 APIキーを使用して、提供するセキュリティ機能を活用しています。いくつかのテスト目的で、サードパーティのレストクライアントPOSTMANを介してAPIエンドポイントを呼び出そうとしています。

リクエストはPOSTタイプですが、何を試そうとしても、

403 ("message": "Missing authentication token.")

参照用にスナップショットが添付されています。 (セキュリティ上の理由により、一部が網掛けされています)

enter image description here

  1. 行動の根本原因を推測することはできません。
  2. 同じことが他のツールで実現できる場合は、提案してください。
30
Subham Tripathi

AWS API Gatewayでの作業から、あなたが持っていると思われるのと同じtrapに陥りました。悪名高い403 ("message": "Missing authentication token.")メッセージが表示される原因には、次の2つがあります。

  1. CloudFrontのアグレッシブキャッシング

CloudFrontを使用してAPIリクエスト/レスポンスをキャッシュしていることに気付きました。 CloudFrontは素晴らしいツールです(私に聞いたら最高のキャッシングメカニズムの1つです)が、開発中に物事をキャッシュすると、キャッシュされたエラーメッセージに簡単に追いつくことができます。この場合が該当する可能性があるため、APIを完全に機能するまでCloudFrontから削除することをおすすめします。

  1. 再デプロイを忘れる

API Gatewayの主要な機能の1つは、AWSが複数のバージョンのAPIを処理する方法です。デプロイされると、APIエンドポイント変更されない — APIエンドポイントに必要なものを正確に知ることができます。

これは、エンドポイントの展開方法によるものです。ライブと対話するには、AWSコンソールで行われた各変更を特定のデプロイにデプロイする必要があります。

たとえば、APIを「ライブ」デプロイメントにデプロイし、すべてが正常に機能する場合、それは素晴らしいことです。これで、AWSコンソールの設定を微調整してAPIを改善できるようになりました。変更内容に満足したら、別のAPIデプロイに再度デプロイできます。つまり、現在のAPIユーザーは、展開が作業中の展開に戻るまで、相互作用メソッド。

発生する可能性のある問題は、AWSコンソールで多くの変更を行ったにもかかわらず、Postmanでテストしているデプロイメントに再デプロイしていない可能性があることです。

サイドノート:

[リソースエディター]パネルで、このメソッドの応答タイプ、ヘッダー、コンテンツタイプに関する情報を提供できます。ここで、より意味のあるエラーメッセージをエンドポイントに提供できます。

25
Greg

URLにリソースを追加していないようです。 URLは次のようになります。

https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource

でもあなたのものはもっと

https://my-api-id.execute-api.region-id.amazonaws.com/test
23
noo

存在しないAPI Gatewayパスを要求すると、「message:Missing Authentication Token」ペイロードが返されます。

残念ながら、それはかなり混乱しています。

9
David Dehghan

私の場合、サポートしているメソッドはPOSTであり、ブラウザでGETを試してみました。 PostmanでPOSTを実行して再試行しましたが、うまくいきました!

5
f01

API使用プランを追加してから、プランをAPIステージにリンクする必要がありました。

これが、キーをAWSのAPIにリンクする唯一の方法のようです。

3
TimoSolo

デプロイされているリソースを呼び出していることを確認してください。そうでない場合は、404の代わりに、この 混乱するAPIエラー を使用します。デプロイされた「ステージ」に移動して、リソースが存在するかどうかを確認できます。

新しいリソースを展開するには:Actions -> Deploy APIに移動します

amz-api-gateway

正しいエンドポイントを取得するには [ステージ]に移動して、呼び出したいリソースをクリックします。リンク「invoke URL」が表示されます

resource-endpoint

その後、単にcurlコマンドを実行できます

curl --request GET https://88upd88you.execute-api.us-west-2.amazonaws.com/dev/hello

注:上記のdevは私のステージ名です。

0
prayagupd

[ステージエディター]ページには、ステージ名の左ナビゲーションがあります。これを展開すると、スラッシュが付きます。これを展開すると、リソースが得られます。リソースを展開するとメソッドが取得され、メソッドをクリックすると「Invoke URL」リンクが表示されます(上記と同じですが、リソースが追加されています)。この呼び出しURLリンクは機能し、GETメソッドを呼び出して結果を返します。

0
Anubhav Gupta