【问题标题】:Passing custom data from AWS Lambda Authorizer从 AWS Lambda 授权方传递自定义数据
【发布时间】:2022-12-09 17:02:58
【问题描述】:

简而言之,我想将信息从我的自定义 Lambda 授权方传递到后端。我有一个带有代理集成 lambda 作为后端的 rest API GW。自定义授权方的返回对象看起来像下面的 json。在这种情况下,我想将 var1 和 var2 传递给代理 lambda。

{
    "principalId": "ExecuteAPISid",
    "policyDocument": {
        "Version": "2012-10-17",
        "Statement": [{
            "Action": "execute-api:Invoke",
            "Effect": "Allow",
            "Resource": "*"
        }]
    },
    "context": {
        "var1": "hello_world",
        "var2": "hello_world2"
    }
}

我看到这个问题之前已经被问过和回答过,但是建议的解决方案,例如 here,指的是 AWS API 网关菜单中集成请求下的“标头映射”。然而,对我来说,我没有这样的选择。因此,我知道我想做什么,但缺乏实现它的能力。

有没有人知道如何实现这些标头映射?完成设置如下图所示。

编辑:进一步挖掘后发现问题与我使用 lambda-proxy 集成有关。 This answer 强调了这一点。但是,这只是将我的问题转移到:为什么我的 requestContext 不包含 authorizer 对象。

【问题讨论】:

  • 配置的集成请求类型是 LAMBDA 还是 LAMBDA_PROXY?如果它是 lambda 代理,那么您不需要映射请求的标头,它会自动连接 - “请求将被代理到 Lambda,请求详细信息在您的处理函数的 event 中可用。”
  • 它是一个 lambda 代理。用截图更新了问题。
  • - 在您的 lambda 函数中尝试输出事件对象并查看标头和上下文值是否已经存在。
  • 我确实记录了整个事件对象,但没有任何痕迹。这就是我希望在线阅读的内容,这就是为什么需要标头映射的全部原因。
  • 您是否在方法请求中定义了请求标头/请求主体,这些值是否已正确发送?

标签: amazon-web-services aws-lambda amazon-api-gateway


【解决方案1】:

事实证明,当您使用代理集成时,自定义 Authorizer Lambda 的上下文对象会自动传递给事件,如下所示:

"requestContext": {
    "resourceId": "XXXX",
    "authorizer": {
        "var1": "hello_world1",
        "var2": "hello_world2",
        "principalId": "ExecuteAPIS",
        "integrationLatency": 780
    },

问题是我忘了“部署”我的 API GW。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2017-05-20
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多