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

上次更新时间:2020 年 5 月 8 日

对我的 Amazon API Gateway API 进行调用会在我创建 Lambda 授权方后收到 401 未授权错误。为什么我会收到这些错误?

简短描述

注意:API Gateway 可能会在各种场景下返回 401 未授权错误。本文仅讨论与 Lambda 授权方相关的 401 错误。

当 Lambda 授权方的 API Gateway API 收到未授权请求时,API Gateway 会返回 401 未授权响应。对于基于令牌的授权方,该错误通常会在必需的令牌缺失或授权方的令牌验证表达式使令牌失效时发生。对于基于请求参数的授权方,该错误通常在配置的身份源缺失、为 null、为空或无效时发生。

有关 Lambda 授权方类型的更多信息,请参阅使用 API Gateway Lambda 授权方

解决方法

查看 API Gateway 控制台中您的 Lambda 授权方配置,以确定必须在至您的 API 的请求中包含什么内容。然后,通过使用所需的标头和令牌值或身份源调用您的 API 来测试授权方。

提示:为了帮助正确配置 Lambda 授权方,您可以使用 API Gateway 开发人员指南中的示例设置。有关说明,请参阅示例:创建基于令牌的 Lambda 授权方函数示例:创建基于请求的 Lambda 授权方函数

检查 Lambda 授权方的配置

  1. API Gateway 控制台API 窗格中,选择您的 API 的名称。
  2. 在左侧导航窗格中,在 API 下选择授权方
  3. 查看授权方的以下内容:
    如果 Lambda 事件有效负载被设置为令牌,请检查令牌源的值。该值必须用作请求标头。如果您为令牌验证输入正则表达式,则 API Gateway 会根据此表达式验证令牌。例如,如果您输入正则表达式 \w{5},将只会成功验证包含 5 个字符组成的字母数字字符串的令牌值。
    如果 Lambda 事件有效负载被设置为请求,则检查配置的身份源。它们可能是标头、查询字符串、阶段变量$context 变量。如果授权缓存已启用,则按照所有配置的身份源验证至您的 API 的请求。
  4. 如果您已设置授权缓存(“授权缓存 {0} 分钟”),则禁用缓存以便在下一步中进行测试。

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

部署您的 API

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

测试 Lambda 授权方

调用您的 API 以进行测试,从而确保根据您的 Lambda 授权方的配置形成请求。

API Gateway 控制台

  1. API Gateway 控制台中的授权方页面上,为您的授权方选择测试
  2. 测试授权方对话框中,执行以下操作之一:
    对于基于令牌的授权方,在 {headerName} (header) 旁输入有效的授权令牌值。
    对于基于请求参数的授权方,在请求参数下,针对为授权方配置的所有身份源输入值。
  3. 选择测试

如果授权成功,您将看到响应代码:200

Postman 或 curl

您还可以使用 Postman 应用程序或使用命令界面中的 curl 调用您的 API 以进行测试。有关使用 Postman 的示例说明,请参阅使用 API Gateway Lambda 授权方调用 API。如需关于 curl 的更多信息,请参见 cURL 项目网站

注意:如果您在测试前为 Lambda 授权方禁用了授权缓存,您可以在测试后重新启用它。如果您重新启用设置,确保之后重新部署 API