Mag*_*dal 9 lambda amazon-web-services node.js aws-api-gateway
我已经为我的AWS API网关成功实现了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",
...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中,context包含一些参数,比如company_id,我想传递给我的Node端点.
如果我要使用Lambda端点,我知道这是通过Mapping Template完成的,如下所示:
{
"company_id": "$context.authorizer.company_id"
}
Run Code Online (Sandbox Code Playgroud)
但是,如果选择Lambda作为Integration类型,则Body Mapping Template仅在Integration Request下可用.如果选择了HTTP则不行.
简而言之,我如何company_id从我的Lambda授权程序传递到我的Node API?
Mag*_*dal 16
在我的问题的评论中,大部分功劳都归功于@ Michael-sqlbot,但如果其他人发现这个问题,我会在这里给出完整的答案.
授权人Lambda
它必须以此格式返回一个对象,其中context包含您要转发到端点的参数,如问题中所指定.
{
"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
...
}
}
Run Code Online (Sandbox Code Playgroud)
方法请求
在"方法请求/ HTTP请求标头"下,添加要转发的上下文属性:
company_id集成请求
在Integration Request/HTTP Headers下,添加:
company_idcontext.authorizer.company_id如果您使用的是lamda-proxy,则可以从event.requestContext.authorizer.
因此company_id可以使用event.requestContext.authorizer.company_id.
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |