我已经为我的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
兑现:可选