为什么我在创建 Lambda 授权方后收到 API Gateway 401 未授权错误?

上次更新日期:2021 年 11 月 04 日

我的 Amazon API Gateway API 在我为其创建 Lambda 授权方后返回 401 未经授权错误。为什么会发生这种情况?如何排查此问题?

简短描述

注意:API Gateway 可能会因很多原因返回 401 未经授权错误。本文仅讨论与 Lambda 授权方相关的 401 错误。

Lambda 授权方的 API Gateway API 收到未授权请求时,API Gateway 会返回 401 未经授权响应。

对于基于令牌的 Lambda 授权方

401 未经授权错误通常会在必需的令牌缺失或授权方的令牌验证表达式使令牌失效时发生。

对于基于请求参数的 Lambda 授权方

401 未经授权错误通常在配置的身份源缺失、为 null、空或无效时发生。

要解决此类错误,请通过查看 Lambda 授权方的配置来验证哪些信息必须包含在对 API 的请求中。然后,通过使用所需的标头和令牌值或身份源调用您的 API 来测试授权方。

注意:有关 Lambda 授权方设置的示例,请参阅创建基于令牌的 Lambda 授权方函数创建基于请求的 Lambda 授权方函数

解决方法

查看 Lambda 授权方的配置

1.    打开 API Gateway 控制台

2.    在 API 窗格中,选择您的 API 的名称。

3.    在左侧导航窗格中的 API 名称下,选择 Authorizers(授权方)。Authorizers(授权方)页面随即打开。

4.    根据您的使用案例,查看授权方的配置以了解以下其中一项:

对于基于令牌的 Lambda 授权方

如果 Lambda 事件有效负载被设置为令牌,则检查令牌源值。在调用 API 时,必须使用令牌源值作为请求标头。

重要提示:如果您为令牌验证输入正则表达式,则 API Gateway 会根据此表达式验证令牌。例如,如果您输入正则表达式 \w{5},将只会验证包含 5 个字符组成的字母数字字符串的令牌值。

-或者-

对于基于请求参数的 Lambda 授权方

如果 Lambda 事件有效负载被设置为请求,则检查配置的身份源。身份源可能是标头、查询字符串、阶段变量$context 变量

重要提示:如果授权缓存已激活,则按照所有配置的身份源验证至您的 API 的请求。

5.    如果您已激活授权缓存(“授权缓存 {0} 分钟”),则关闭缓存以便在下一步中进行测试。

有关更多信息,请参阅使用 API Gateway 控制台配置 Lambda 授权方

部署您的 API

如果您更改了 Lambda 授权方的配置或任何其他 API 设置,请重新部署您的 API 以提交更改。

测试您的 Lambda 授权方

要测试您的 Lambda 授权方,请执行以下操作之一对您的 API 进行测试调用:

重要提示:请确保根据 Lambda 授权方的配置格式化请求。

使用 API Gateway 控制台测试 Lambda 授权方

1.    打开 API Gateway 控制台

2.    在 API 窗格中,选择您的 API 的名称。

3.    在左侧导航窗格中的 API 名称下,选择 Authorizers(授权方)。

4.    在 Authorizers(授权方)页面上,为您的授权方选择 Test(测试)。

5.    在 Test Authorizer(测试授权方)对话框中,根据您的使用案例执行以下操作之一:

对于基于令牌的 Lambda 授权方

对于 {headerName} (header) 值,请输入有效的授权令牌。

-或者-

对于基于请求参数的 Lambda 授权方

Request Parameters(请求参数)下,输入为授权方配置的所有身份源的值。

6.    选择 Test(测试)。

如果请求的格式正确,API Gateway 将返回 Response Code: 200(响应代码:200)消息。

使用 Postman 或 curl 测试 Lambda 授权方

有关如何使用 Postman 应用程序测试 Lambda 授权方的说明,请参阅使用 API Gateway Lambda 授权方调用 API

有关 curl 的更多信息,请参阅 cURL 项目网站

注意:如果您在测试前为 Lambda 授权方关闭了授权缓存,您可以在测试后重新激活它。如果您重新激活授权缓存,请确保重新部署 API 以提交更改。