為什麼在建立 Lambda 授權者之後會收到 API Gateway 401 未授權錯誤?

2 分的閱讀內容
0

在為 Amazon API Gateway API 建立 AWS Lambda 授權者之後,傳回 401 未授權錯誤。為什麼會發生這種情況,該如何對此問題進行疑難排解?

簡短描述

**注意:**API Gateway 傳回「401 未授權」錯誤的原因有很多。本文僅解決 API Gateway 在未呼叫授權者 Lambda 函數的情況下傳回的 401 未授權回應錯誤。

當具有 Lambda 授權者的 API Gateway API 收到未經授權的請求時,API Gateway 即會傳回「401 未授權」回應。

適用於權杖型 Lambda 授權者

401 未授權錯誤通常發生在缺少請求的權杖或未通過授權者之權杖驗證表示式的驗證時。

適用於請求參數型 Lambda 授權者

401 未授權錯誤通常發生在設定的身分來源缺少、為空值、是空的或無效時。

若要對此錯誤類型進行疑難排解,請檢閱 Lambda 授權者的組態,以驗證 API 請求中必須包含的資訊。然後,透過使用請求的標頭和權杖值或身分來源呼叫 API 以測試授權者。

**注意:**例如 Lambda 授權者設定,請參閱建立權杖型 Lambda 授權者函數建立請求型 Lambda 授權者函數

解決方案

檢閱 Lambda 授權者的組態

1.    開啟 API Gateway 主控台

2.    在「API」窗格中,選擇 API 的名稱。

3.    在導覽窗格的 API 名稱下,選擇「授權者」。「授權者」頁面即會開啟。

4.    根據您的使用案例,檢閱授權者的組態是否包含以下內容之一:

適用於權杖型 Lambda 授權者

如果「Lambda 事件承載」設定為「權杖」,請檢查「權杖來源」值。在呼叫 API 時,「權杖來源」值必須用作請求標頭。

**重要:**如果您針對「權杖驗證」輸入正規表示式,則 API Gateway 會根據該表示式驗證權杖。例如,如果您輸入正規表示式 \ w{5},則僅成功驗證含 5 個字元的英數字串的權杖值。

-或-

適用於請求參數型 Lambda 授權者

如果「Lambda 事件承載」設定為「請求」,請檢查設定的「身分來源」。身分來源可以是標頭、查詢字串、多值查詢字串、階段變數$context 變數

**重要:**如果「授權快取」已開啟,則會根據所有已設定的身分來源驗證對 API 的請求。

5.    如果您已開啟「授權快取」(例如,「授權快取 1 分鐘」),請在下一個步驟中關閉快取以進行測試。

如需詳細資訊,請參閱使用 API Gateway 主控台設定 Lambda 授權者

部署 API

如果您變更了 Lambda 授權者的組態或任何其他 API 設定,請重新部署 API 以認可變更。

測試 Lambda 授權者

若要測試 Lambda 授權者,請執行以下其中一個動作,對您的 API 進行測試呼叫:

**重要:**確保根據 Lambda 授權者的組態設定請求的格式。

使用 API Gateway 主控台測試 Lambda 授權者

1.    開啟 API Gateway 主控台

2.    在「API」窗格中,選擇 API 的名稱。

3.    在導覽窗格的 API 名稱下,選擇「授權者」。

4.    在「授權者」頁面上,針對您的授權者選擇「測試」。

5.    在「測試授權者」對話框中,根據您的使用案例執行以下其中一個動作:

適用於權杖型 Lambda 授權者

1.    在未對「**授權權杖」提供任何值的情況下,選擇「測試」。API Gateway 會傳回回應碼: 401 **因為「授權權杖」是空的。

2.    如果已設定使用正規表示式 \ w{5} 的「權杖驗證」,請輸入一個無效的值 (例如 “abc123”) 作為「授權權杖」。然後,選擇「測試」。API Gateway 會傳回**回應碼: 401 **因為「授權權杖」不符合「權杖驗證」表示式的要求。

3.    對於「授權權杖」值,請輸入「allow」,然後選擇「測試」。API Gateway 會傳回回應碼: 200 訊息。

-或-

適用於請求參數型 Lambda 授權者

1.    刪除「請求參數」,然後選擇「測試」。 API Gateway 會傳回**回應碼: 401 **因為缺少「請求參數」。

2.    對於「請求參數」,請輸入「headerValue1」、「queryValue1」和「stageValue1」,然後選擇「測試」。API Gateway 會傳回回應碼: 200 訊息。

若要使用 Postman 或 curl 來測試 Lambda 授權者

如需如何使用 Postman 應用程式測試 Lambda 授權者的說明,請參閱使用 API Gateway Lambda 授權者呼叫 API

如需有關 curl 的詳細資訊,請參閱 cURL 專案網站

注意事項:

  • 如果您在進行測試之前關閉了 Lambda 授權者的「授權快取」,則可以在測試之後重新予以啟用。如果您重新啟用「授權快取」,請確定重新部署 API 以認可變更。
  • 如果您收到 Lambda 授權者的跨來源資源共用 (CORS) 錯誤,則可以為 DEFAULT 4XX API Gateway 回應新增 CORS 標頭。如需詳細資訊,請參閱如何對 API Gateway API 的 CORS 錯誤進行疑難排解?

相關資訊

在 API Gateway 中控制和管理 REST API 的存取

如何開啟 Amazon CloudWatch Logs 來對 API Gateway REST API 或 WebSocket API 進行疑難排解?