我按照說明為 Amazon API Gateway REST 或 HTTP API 設定自定網域名稱。當我呼叫 API 時,出現 403「缺少身份驗證字符」錯誤。如何進行疑難排解並解決此錯誤?
簡短描述
如果 URL 路徑不正確,則具有自定義網域名稱的 API 閘道 API 在呼叫 API 時傳回 403「缺少身分驗證字符」錯誤。
**注意:**使用 API 閘道 API 階段 URL 將不會傳回 403「缺少身分驗證字符」錯誤。
解決方案
為 API 閘道 API 設定的自訂網域名稱會使用 API 映射來連接 API 階段,透過自訂網域名稱將流量傳送至 API。API 映射具有 API、階段、自訂網域名稱,以及用於映射的選擇性路徑。如需詳細資訊,請參閱使用 API 映射。
在下列範例中,自訂網域「https://api.example.com」API 映射設定如下:
| | | | | |
---|
API | 範例 | 階段 | Path | 預設 URL | 自訂網域 URL |
abcd3456ef | API 1 | 開發 | (無) | https://abcd3456ef.execute-api.us-east-1.amazonaws.com/dev | https://api.example.com |
wxyz1234ab | API 2 | 測試 | 命令 | https://wxyz1234ab.execute-api.us-east-1.amazonaws.com/test | https://api.example.com/orders |
mnop5678qr | API 3 | prod | 客戶 | https://mnop5678qr.execute-api.us-east-1.amazonaws.com/prod | https://api.example.com/customers |
在此範例設定中,使用 URL https://abcd3456ef.execute-api.us-east-1.amazonaws.com/dev/resourceA 向 API 1 發出的要求會成功將流量路由傳送至「資源 A」。這是因為要求是針對階段名稱「dev」的資源發出的。但是,使用 URL https://api.example.com/dev/resourceA 的相同請求傳回 403「缺少身分驗證字符」錯誤。之所以發生這個錯誤,是因為階段「dev」已映射至自訂網域名稱的 (無) 路徑。若要使用自訂網域名稱將要求路由到「資源 A」,請確定 URL 為 https://api.example.com/resourceA。
同樣地,相當於 https://wxyz1234ab.execute-api.us-east-1.amazonaws.com/test/resourceB 的自訂網域名稱 URL 為 https://api.example.com/orders/resourceB。這是因為 API 2 的「測試」階段映射到自定義網域 API 映射中的路徑「命令」。
相關資訊
如何針對 API 閘道的 HTTP 403 錯誤進行疑難排解?
如何解決 API 閘道 REST API 端點 403「缺少身份驗證字符」錯誤?
在 API 閘道中設定區域自訂網域名稱