未调用 AWS API Gateway 自定义授权方

Posted

技术标签:

【中文标题】未调用 AWS API Gateway 自定义授权方【英文标题】:AWS API Gateway Custom Authorizer not invoked 【发布时间】:2019-03-04 02:37:32 【问题描述】:

首先,我对 AWS 很陌生。从非常基本的 API Gateway + Lambda 集成开始。以下是我的用例。

    使用 API 网关创建 Lambda 代理集成请求,GET 请求输出通过查询参数传递的 2 个数字的加法。现在,如果我访问这个 API Gateway 端点,我会得到想要的结果。

    现在我已经创建了自定义授权器,它又是对另一个 lambda 的调用。 因此,请求将在访问 API 网关端点之前由授权者 lambda 进行验证。在这种情况下,根本不会调用授权方。

我已为 API 网关和 lambda 启用 Cloudwatch 日志,所以以下是我面临的问题,

    到 API Gateway 端点的 Cloudwatch 日志未显示对自定义授权方 lambda 的调用。

    在 lambda 组中正确查看到端点 lambda 的日志,但在授权方 lambda 中无法看到相同的日志。

我遵循了以下 AWS 文档,似乎没有任何帮助。

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

以下是 API 网关配置。配置的授权方有一个名为“授权”的标头令牌,API 的使用者应在调用端点时提供授权令牌,该端点应该由授权方进行验证。

API 网关日志 - 直接调用配置的 Lambda,无需调用 Authorizer。

【问题讨论】:

你的代码是什么样的? @RobertHarvey - 我已经使用 API Gateway 配置更新了帖子,它基本上是 Authorizer Lambda 中的简单令牌验证代码。但是在弄清楚代码之前,我无法找到调用 Authorizer 的日志。提前致谢。 您是否查看了“poc-simple-authorizer”lambda 函数日志以确认它没有被调用? @Rajesh - 正如我在 #2 中所述,“poc-simple-authorizer”的执行日志没有记录。当我调用 API Gateway 端点时,无论是在网关日志还是在单个授权方 lambda 函数日志中。 如果授权人日志不可见,那么我的初步问题是 - 在与授权人进行更改后,您是否部署了 API? 【参考方案1】:

正如@Anup 在 cmets 中提到的,您可能需要重新部署阶段才能使更改生效。

就我而言,我在 terraform 中设置了所有内容,但无法弄清楚为什么没有调用自定义身份验证器。

在向部署添加变量以触发重新部署后,自定义身份验证器按预期正确调用。

【讨论】:

今天又救了我。 如果其他人像我一样努力寻找如何重新部署,请单击 API,然后单击资源(API 中的第一个链接,就在阶段链接上方),然后从顶部的操作下拉列表中,选择部署 API 选项【参考方案2】:

确保您的 lambda 和网关授权器配置正确。几个建议:

验证您的 lambda 是否具有 API 网关触发器。当您将授权方分配给 API 网关授权方设置中的有效 lambda 函数时,会自动创建触发器。

验证您的 lambda 是否具有有效的处理程序。当前分配的处理程序可以在您的 lambda 配置页面中看到。

确保您的资源的Method Request Authorization 设置为正确的授权人

部署网关以保证当前 API 阶段使用显示的设置。

即使您的授权代码不能正常工作,您至少应该在 CloudWatch 中看到执行日志。

【讨论】:

除了此答案中的要点之外,请检查您的授权人是否未配置身份源。如果您配置了一个并且没有在请求中传递此信息,APIGW 将返回 401 错误而不调用 lambda 授权器。

以上是关于未调用 AWS API Gateway 自定义授权方的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway 自定义授权方有用吗?

AWS API Gateway 自定义授权方给予例外

如何为 AWS API Gateway 自定义授权方配置 CORS?

在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?

API 创新不会触发 AWS API Gateway 的基于自定义请求的 lambda 授权方

AWS API Gateway 身份验证(Cognito 与自定义授权者)