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)吗?
勒布
授权人的策略文档可以通过上下文来丰富,您可以在其中放置自定义数据。该数据将通过事件提供给业务 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 对象或数组设置为上下文映射中任何键的有效值
我猜$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']. 这是创建端点时的默认行为。
文档中有关映射模板的参考:
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |