我已经成功地为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
包含一些参数,如company_id
,我希望将这些参数传递给我的Node端点。
如果我使用Lambda端点,我知道这是通过Map模板和类似下面的内容完成的:
{
"company_id": "$context.authorizer.company_id"
}
但是,仅当选择Lambda作为集成类型时,主体Map模板才在集成请求下可用。如果选择HTTP,则不可用。
简而言之,如何将company_id
从Lambda授权程序传递到Node API?
3条答案
按热度按时间y53ybaqx1#
大部分功劳都要归功于我的问题的评论中的@Michael-sqlbot,但是如果其他人找到这个问题,我会把完整的答案放在这里。
授权人Lambda
它必须以这种格式返回一个对象,其中context包含要转发到端点的参数,如问题中所指定的。
方法请求
在“方法请求/ HTTP请求标头”下,添加要转发的上下文属性:
company_id
集成请求
在集成请求/ HTTP标头下,添加:
company_id
context.authorizer.company_id
xoefb8l82#
如果您使用的是
lamda-proxy
,则可以从event.requestContext.authorizer
访问上下文。因此,可以使用
event.requestContext.authorizer.company_id
访问您的company_id
。m2xkgtsf3#
如果你正在使用
lamda-proxy
(至少在Golang后端),你可以访问存储在授权者上下文中的值,而无需Map模板的使用!记住重新启动API并等待几分钟!对我很有效。