我已经为我的AWS API Gateway成功实现了Lambda授权者,但是我想将一些自定义属性传递给我的Node.js终端节点。

授权者的输出遵循AWS指定的格式,如下所示。

{
  "principalId": "yyyyyyyy",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]"
      }
    ]
  },
  "context": {
    "company_id": "123",
    ...
  }
}


就我而言,context包含一些我想传递到我的Node端点的参数,例如company_id

如果我要使用Lambda端点,则可以理解这是通过映射模板完成的,如下所示:

{
  "company_id": "$context.authorizer.company_id"
}


但是,仅当选择Lambda作为集成类型时,“人体贴图模板”才在“集成请求”下可用。如果选择HTTP,则不是。

简而言之,如何将company_id从Lambda授权者传递给Node API?

最佳答案

大多数问题归功于我对问题的评论中的@ Michael-sqlbot,但如果有人发现此问题,我将在此处提供完整答案。

授权者Lambda

它必须以这种格式返回一个对象,其中上下文包含您要转发到端点的参数,如问题中所指定。

{
  "principalId": "yyyyyyyy",
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [{
      "Action": "execute-api:Invoke",
      "Effect": "Allow|Deny",
      "Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]"
    }]
  },
  "context": {
    "company_id": "123", <-- The part you want to forward
    ...
  }
}


方法要求

在“方法请求/ HTTP请求标头”下,添加要转发的上下文属性:


名称:company_id
必需:可选
兑现:可选


整合要求

在集成请求/ HTTP标头下,添加:


名称:company_id
映射自:context.authorizer.company_id
兑现:可选

07-24 13:01