Lambda オーソライザーの作成後に API Gateway 401 Unauthorized エラーが表示されるのはなぜですか?

最終更新日: 2021 年 11 月 4 日

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

簡単な説明

注: API Gateway は、さまざまな理由で 401 Unauthorized エラーを返すことがあります。この記事では、Lambda オーソライザーのみに関連する 401 エラーについて説明します。

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

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

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

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

401 Unauthorized エラーは通常、設定されたアイデンティティソースが不足しているか、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 Caching] (認可のキャッシュ) が設定されている場合 ([Authorization cached for {0} minutes] ({0} 分間キャッシュされた認可))、次のステップのテストのためにキャッシュをオフにします。

詳細については、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 オーソライザーの場合

[{headerName} (header)] の値で、有効な認可トークンを入力します。

- または -

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

[Request Parameters] (リクエストパラメータ) で、オーソライザー向けに設定されているすべてのアイデンティティソースの値を入力します。

6.    [Test] (テスト) を選択します。

リクエストが正しくフォーマットされている場合、API Gateway はレスポンスコード: 200 メッセージを返します。

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

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

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

注: テストを実行する前に Lambda オーソライザーの [Authorization Caching] (認可のキャッシュ) をオフにした場合は、テスト後に再度アクティブ化できます。[Authorization Caching] (認可のキャッシュ) を再アクティブ化する場合は、API を再デプロイして変更をコミットしてください。