AWS API Gatewayを介してLambda関数を呼び出そうとしています。認証タイプNONEを指定すると、正常に機能しますが、APIが公開され、URLを持つすべてのユーザーが私のAPIにアクセスできます。 API呼び出しを安全にするために、認証タイプAWS_IAMを使用しており、AmazonAPIGatewayInvokeFullAccessポリシーもユーザーにアタッチしていますが、このエラーが発生します。
{ message: "Missing Authentication Token"}
ここで何が欠けているのか分かりません。
APIリンクに直接アクセスしようとしていると思いますが、APIはIAMロールを使用して保護されており、AWS認証、つまりアクセスキーとシークレットキーを提供する必要があるため、これは機能しません。
Postman Chrome拡張機能を使用してAPIをテストします。 http://docs.aws.Amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call- api.html
私は愚かな理由で時間を失いました:
ステージを作成すると、表示されるリンクにはURLのリソース部分が含まれません。
API URL:https://1111.execute-api.us-east-1.amazonaws.com/dev
API +リソースURLhttps://1111.execute-api.us-east-1.amazonaws.com/dev/get-リスト
/ get-listがありませんでした
そしてもちろん、メソッドの構成が次のようになっていることを確認する必要があります。
同じ問題が発生したばかりで、リソースが見つからない場合にもこのメッセージが表示されるようです。
私の場合、APIを更新しましたが、再デプロイするのを忘れていました。この問題は、更新されたAPIを私のステージにデプロイした後に解決されました。
(2019年4月現在)AWS API Gatewayはさまざまな理由でこの例外をスローします-主に、API Gatewayがデプロイされていないために、または特定の場合に、API Gatewayが到達できないエンドポイントに到達した場合HTTPメソッドはサポートされていません。
一般的なHTTP 403 Forbiddenの代わりに、ゲートウェイがHTTP 405 Method not supportedやHTTP 404 not foundなどのより適切なエラーコードを送信することを望みます。
ドキュメントでこれを見つけました:
AWS_IAM認証が使用された場合、署名バージョン4プロトコルを使用してリクエストに署名します。
APIのSDKを生成することもできます。
選択したプラットフォーム用のSDKを生成すると、ステップ6で、AWS認証情報を使用している場合、APIへのリクエストに署名することが記載されています。
API Gatewayで生成されたSDKをAWS認証情報で初期化するには、次のようなコードを使用します。 AWS認証情報を使用する場合、APIへのすべてのリクエストは署名されます。つまり、リクエストごとに適切なCORS Acceptヘッダーを設定する必要があります。
var apigClient = apigClientFactory.newClient({
accessKey: 'ACCESS_KEY',
secretKey: 'SECRET_KEY',
});
AWS_IAM認証を有効にする場合、 AWS署名バージョン4 を使用してAWS認証情報でリクエストに署名する必要があります。
注:AWSコンソールへのサインインは、APIに対するブラウザーのリクエストに自動的にサインインしません。
まず、lamda関数で作成したAPIがAWSプロジェクトに登録されているかどうかを確認します。そのためには、AWSコンソールのAPIゲートウェイに移動します。登録されていない場合は登録してください。これがこの問題の主な原因です。
aws.export.jsファイルでも、API ['/items']
に対応するパスがあることがわかります。
APIはそこに存在する必要があります。存在しない場合、リクエストにセキュリティトークンが追加されません。これを行うには、コンソールのプロジェクトクラウドロジックに登録するだけです。
そこにある場合は、上記のソリューションを使用してください
http://docs.aws.Amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
間違ったAPIを呼び出しているときにこのメッセージが表示されることがあります
aPIエンドポイントを確認してください