未调用 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 自定义授权方配置 CORS?
在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?