AWS lambda:将数据从自定义授权程序传递到业务lambda

Seb*_*ioz 7 amazon-web-services aws-lambda aws-api-gateway

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

首先,如果$ context变量是另一个变量或者与JS函数参数中接收的上下文变量相同的变量,你能解释一下吗?

第二,你能解释一下如何让我的业务lambda获得授权人提供的数据字段(例如:principalId)吗?

勒布

StV*_*StV 5

授权人的策略文档可以通过上下文来丰富,您可以在其中放置自定义数据。该数据将通过事件提供给业务 lambda。

以下是政策文件的示例:

const policy = {
    context: {
        customKey: 'payload data',
      },
    policyDocument: {
        Statement: [{
            Action: 'execute-api:Invoke',
            Effect: effect,
            Resource: resource,
        }],
        Version: '2012-10-17',
    },
    principalId: sub,
};
Run Code Online (Sandbox Code Playgroud)

上下文包含一个“customKey”,有效载荷数据是一个字符串。

您的 API 的映射模板应如下所示:

{
  "customKey": "$context.authorizer.customKey"
}
Run Code Online (Sandbox Code Playgroud)

最后,在您的业务 lambda 中,您可以通过事件访问 customKey 的值:

exports.handler = async (event, context) => {

console.log(event.customKey);

.
.
.
};
Run Code Online (Sandbox Code Playgroud)

根据我的示例,这应该记录“有效载荷数据”。

请注意,根据文档,您不能将 JSON 对象或数组设置为上下文映射中任何键的有效值


Ale*_*N-o 3

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

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

如果您的 API 端点的映射模板如下所示:

{
  "principalId" : "$context.authorizer.principalId"
}
Run Code Online (Sandbox Code Playgroud)

您应该检索principalIdLambdaevent参数中的 。

使用直通选项,principalId应该在event.context['authorizer-principal-id']. 这是创建端点时的默认行为。


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