Lambda オーソライザーの作成後に API Gateway の「401 Unauthorized」(401 認可されていません) エラーが表示されるのはなぜですか?

所要時間2分
0

Amazon API Gateway API の AWS Lambda オーソライザーを作成した後、「401 Unauthorized」(401 認可されていません) エラーが返されます。これが発生するのはなぜですか? また、この問題をトラブルシューティングするにはどうすればよいですか?

簡単な説明

注: API Gateway は、さまざまな理由で 401 Unauthorized エラーを返すことがあります。この記事では、オーソライザー Lambda 関数を呼び出さずに API Gateway から返される 401 Unauthorized レスポンスエラーに限定して説明します。

Lambda オーソライザーを備えた API Gateway API が承認されていないリクエストを受け取ると、API Gateway は 401 Unauthorized レスポンスを返します。

トークンベースの Lambda オーソライザーの場合

通常、必要なトークンが不足しているか、オーソライザーのトークン検証式によって検証されていない場合に、「401 Unauthorized」(401 認可されていません) エラーが発生します。

リクエストパラメータベースの Lambda オーソライザーの場合

「401 Unauthorized」(401 認可されていません) エラーは通常、設定されたアイデンティティソースが不足しているか、null、空、または無効である場合に発生します。

このタイプのエラーをトラブルシューティングするには、Lambda オーソライザーの設定を確認して、API へのリクエストに含める必要がある情報を確認します。その後、必要なヘッダーとトークン値、またはアイデンティティソースを使用して API を呼び出して、オーソライザーをテストします。

注: Lambda オーソライザーの設定例については、「トークンベースの Lambda オーソライザー関数を作成する」および「リクエストベースの Lambda オーソライザー関数を作成する」を参照してください。

解決方法

Lambda オーソライザーの設定を確認する

1.    API Gateway Console にログインします。

2.    [API] ペインで、API の名前を選択します。

3.    ナビゲーションペインで、API の名前の下にある [Authorizers] (オーソライザー) を選択します。[Authorizers] (オーソライザー) ページが開きます。

4.    ユースケースに基づいて、次のいずれかについてオーソライザーの設定を確認します。

トークンベースの Lambda オーソライザーの場合

[Lambda Event Payload] (Lambda イベントペイロード) が [Token] (トークン) として設定されている場合は、[Token Source] (トークンソース) の値を確認します。[Token Source] (トークンソース) の値は、API の呼び出しでリクエストヘッダーとして使用する必要があります。

重要: [Token Validation] (トークン検証) に正規表現を入力した場合、API Gateway は、この式に対してトークンを検証します。例えば、正規表現 \ w{5} を入力した場合、5 文字の英数字の文字列を含むトークン値のみが検証されます。

  • または -

リクエストパラメータベースの Lambda オーソライザーの場合

[Lambda Event Payload] (Lambda イベントペイロード) が [Request] (リクエスト) に設定されている場合は、設定されているアイデンティティソースを確認します。アイデンティティーソースは、ヘッダー、クエリ文字列、複数の値を持つクエリ文字列、ステージ変数、または $context 変数です。

重要: [Authorization Caching] (認可のキャッシュ) が有効な場合、API へのリクエストは、設定済みのすべてのアイデンティティソースに対して検証されます。

5.    [Authorization cached for 1 minutes] (1 分間キャッシュされた認可) などの [Authorization Caching] (認可のキャッシュ) が有効な場合、次のステップのテストのためにキャッシュをオフにします。

詳細については、「API Gateway コンソールを使用した Lambda オーソライザーの設定」を参照してください。

API をデプロイする

Lambda オーソライザーの設定またはその他の API 設定を変更した場合は、API を再デプロイして変更をコミットします。

Lambda オーソライザーをテストする

Lambda オーソライザーをテストするには、次のいずれかを実行して API に対するテスト呼び出しを実行します。

重要: Lambda オーソライザーの設定に従ってリクエストをフォーマットしてください。

API Gateway コンソールを使用して Lambda オーソライザーをテストするには

1.    API Gateway Console にログインします。

2.    [API] ペインで、API の名前を選択します。

3.    ナビゲーションペインで、API の名前の下にある [Authorizers] (オーソライザー) を選択します。

4.    [Authorizers] (オーソライザー) ページで、オーソライザーの [Test] (テスト) を選択します。

5.    [Test Authorizer] (オーソライザーのテスト) ダイアログボックスで、ユースケースに基づいて次のいずれかを実行します。

トークンベースの Lambda オーソライザーの場合

1.    [Authorization Token] (認証トークン) に値を指定せずに [Test] (テスト) を選択します。 [Authorization Token] (認証トークン) が空なので、API Gateway は Response Code: 401 (レスポンスコード: 401) を返します。

2.    正規表現 \ w{5}[Token Validation] (トークン検証) が設定されている場合、有効でない値 (「abc123」など) を [Authorization Token] (認可トークン) として入力します。その後、[Test] (テスト) を選択します。[Authorization Token] (認可トークン) が [Token Validation] (トークン検証) 式を満たさないので、API Gateway は「Response Code: 401」(レスポンスコード: 401) を返します。

3.    [Authorization Token] (認証トークン) の値に「allow」と入力して [Test] (テスト) を選択します。API Gateway は Response Code: 200 (レスポンスコード: 200) メッセージを返します。

  • または -

リクエストパラメータベースの Lambda オーソライザーの場合

1.    リクエストパラメータを削除し、[Test] を選択します。リクエストパラメータがないので、API Gateway は Response Code: 401 (レスポンスコード: 401) を返します。

2.    [Request Parameters] (リクエストパラメータ) に「headerValue1」、「queryValue1」、「stageValue1」と入力し、[Test] (テスト) を選択します。API Gateway は Response Code: 200 (レスポンスコード: 200) メッセージを返します。

Postman または curl を使用して Lambda オーソライザーをテストするには

Postman アプリケーションを使用して Lambda オーソライザーをテストする方法については、API Gateway Lambda オーソライザーで API を呼び出すを参照してください。

curl の詳細については、cURL プロジェクトのウェブサイトを参照してください。

注:

  • テストを実行する前に Lambda オーソライザーの [Authorization Caching] (認可のキャッシュ) をオフにした場合は、テスト後に再度アクティブ化できます。[Authorization Caching] (認可のキャッシュ) を再アクティブ化する場合は、API を再デプロイして変更をコミットしてください。
  • Lambda オーソライザーからオリジン間リソース共有 (CORS) エラーを受け取った場合は、DEFAULT 4XX API Gateway レスポンス用に CORS ヘッダーを追加できます。詳細については、「API Gateway API からの CORS エラーをトラブルシューティングするにはどうすればよいですか?」を参照してください。

関連情報

API Gateway での REST API へのアクセスの制御と管理

API Gateway の REST API または WebSocket API のトラブルシューティングのために Amazon CloudWatch Logs をオンにするにはどうすればよいですか?

コメントはありません

関連するコンテンツ