API Gateway の Cognito オーソライザーのテストで ID トークンを入力すると成功するものの、その ID トークンを利用してリクエストを行うと失敗する理由について教えてください。

2022.08.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

API Gateway で Cognito のオーソライザーを作成し、ID トークンを利用してオーソライザーのテストを行い成功しました。
しかし、実際にオーソライザーをメソッドに設定した状態でリクエストを行うと失敗します。
テストでは成功するのに実際にリクエストを行うと失敗する理由を教えてください。

実際のリクエストで失敗した理由

ヘッダーの誤字やトークンの有効期限切れ、Cognito オーソライザーの設定をしたメソッドで、ID トークンではなくアクセストークンの設定をしている可能性などが考えられます。

Cognito オーソライザーのテストでは、アクセストークンではなく ID トークンを使用してテストを行います。
しかし、実際に API Gateway のメソッドで Cognito オーソライザーを設定する際は、ID トークンとアクセストークンを利用できるので、どちらのトークンを利用するように設定しているかご確認ください。

COGNITO_USER_POOLS オーソライザーを作成した後、必要に応じて、ユーザープールからプロビジョニングされた ID トークンを指定することで、呼び出しをテストできます。Amazon Cognito ID SDK を呼び出してユーザーサインインを実行することで、この ID トークンを取得できます。アクセストークンではなく、返された ID トークンを使用してください。
引用元:REST API と Amazon Cognito ユーザープールを統合する

参考資料

REST API と Amazon Cognito ユーザープールを統合する

API Gateway REST API で、Amazon Cognito ユーザープールをオーソライザーとしてセットアップするにはどうすればよいですか?

Amazon Cognito ユーザープールを設定した後、API Gateway REST API エンドポイントの「401 Unauthorized」エラーをトラブルシューティングするにはどうすればよいですか?