2017-02-16 113 views
3

我正在使用自定义身份验证(使用自定义授权者)访问AWS lambda。授权过程正常工作。但是,我在授权者lambda和业务lambda之间传输数据(ex principalId)时遇到了问题。我所有的lambda都是用JS开发的。 正如AWS文档中的解释,在授权者lambda中,我在Auth响应的上下文字段中添加了几个简单字段(下面的代码中的principalId)。但在我的业务lambda中,我无法获得这些字段。 AWS文档讨论了$上下文变量。AWS lambda:将数据从自定义授权者传递到业务lambda

首先,你能解释我如果$背景变量是另一个变量或比JS函数的参数中收到的背景变量相同的变量?

其次,你能否解释我如何获得我的业务lambda数据字段(例如:principalId)由授权者提供?

勒布

+0

为了澄清答案,它在JS函数的上下文变量中不可用。这是事件。该事件只是一个匹配您的映射模板或“代理”集成的默认格式的JSON映射。 –

回答

2

我猜$context变量,你指的是在API网关映射模板中的一个可用。它不等同于业务Lambda的context参数。

但是,使用映射模板及其$context变量,您可以构建业务Lambda的event参数。

如果你的API端点的映射模板看起来是这样的:

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

你应该在lambda的event参数检索principalId

使用传递选项,principalId应在event.context['authorizer-principal-id']中可用。这是您创建端点时的默认行为。


参考有关的文档映射模板:

+0

你如何以及在哪里定义映射模板? –

+0

转到端点定义并输入* Integration Request *部分。然后在* Body Mapping Templates *中,根据请求的内容类型,有多种选项来定义泛型集成或特定的集成。 –

0

除了亚历克西斯答案,principalId - 目前可以从被传递的唯一PARAM自定义授权人到Lambda(截至今天)。但是,传递自定义参数的解决方法是将JSON参数串化为principleId。关于此事的讨论是here