如何在 Lambda 函数中使用 AWS.CloudFront.Signer
Posted
技术标签:
【中文标题】如何在 Lambda 函数中使用 AWS.CloudFront.Signer【英文标题】:How to use AWS.CloudFront.Signer in Lambda function 【发布时间】:2016-11-13 08:15:06 【问题描述】:我正在尝试使用 Lambda 生成并返回一个签名的 cookie,以便我的 ios 应用程序可以使用 cookie 通过 CloudFront 访问受限文件。
我认为这应该可以使用 Signer 类:http://docs.aws.amazon.com/AWSjavascriptSDK/latest/AWS/CloudFront/Signer.html
在此基础上,我编写了如下 Lambda 函数:
var AWS = require('aws-sdk');
var keyPairId = 'APK...';
var privateKey = 'MIIE...';
var signer = new AWS.CloudFront.Signer(keyPairId, privateKey);
exports.handler = function(event, context)
var options = url: "https://xxxxxx.cloudfront.net", expires: 1357100000;
signer.getSignedCookie(options, function(err, data)
if (err)
context.fail(err);
else
context.succeed('Success');
);
;
但是,这不起作用。我不断收到错误“在完成请求之前退出进程”。我已经尝试了许多关于“选项”参数格式的排列,但没有一个有任何区别。
任何帮助将不胜感激。
【问题讨论】:
日志中没有其他内容吗? 【参考方案1】:原来我的私钥格式不正确。它需要包含“-----BEGIN RSA PRIVATE KEY-----”字样以及换行符,如下所示(出于显而易见的原因,私钥被破坏):
var privateKey = '-----BEGIN RSA PRIVATE KEY-----' + '\n' +
'MIIEogIBAAKCAQEAgaqMPqZ2QlhLx7pmguBMR32+dLPq7HrXN92z+QLbLgQklDpU' + '\n' +
'D/LLayMk5tyoZXLjRElZiWgIbLa8ftCQBVT1feG9XbwJVvBKqBkZzHR7xB47LVud' + '\n' +
't8zatnHHQngXkFV/YY+RAv9XN3E6GacXn02cGKbF14pQWFbjdJDcqUq1yf8/b9i7' + '\n' +
'JorOYYarXYXXYPaRp1HxSDAZkjM5WC0GeOk7v4cCgYB5chK6CARv5Wx9yzVYurvQ' + '\n' +
'KJxpidxV2AE4MgTkg8UeK7GPhizJIIKRPmvfM/rmiRC9NvrCHzTsVwk0mVWDhRuH' + '\n' +
'iATROrmPVQA6CZYODAmjXXXXXXsREg2s4+6XKzH/Cylb1YTowkIkWNyZEAtuyaBK' + '\n' +
'BBswVdO8VlOKQoouH71ktQKBgF1Sr4/btRI2wiVWWnEaORJO6+3Pekm4xyIbaOPo' + '\n' +
'yaRSy3KOQETUUR9Wg6dEwCEXBkBfte1dk/DIzES7FppypeXqu7viRLmOC1gXEK+6' + '\n' +
'k1hwClaKGhqafVVsHSsUzIUkBusoo4GKTXnrl/EPD5gpgt9TsPt/D1KqWW5sxfrl' + '\n' +
'dm+fAoGAcr0QqHdGea5OeC0fQGFZkgSQZ3ojdX43KWXXr5Jl+4ZiJTbOYqgGE+DL' + '\n' +
'QJX1I9fqruHhn02hXXX+eTOLOT4GDv2Lf6uHhQPHWgv4K3u/7Xb35Pumn/x2e8vb' + '\n' +
'xrRsk3KxdYAq+I9mpjYKIZL2EswnIkOTFJR+3O179/vpsFpIACg=' + '\n' +
'-----END RSA PRIVATE KEY-----';
有了这个改变,一切正常。
【讨论】:
我尝试了 signer.getSignedUrl 但没有成功! signedurl 和signedcookies 有什么区别吗?以上是关于如何在 Lambda 函数中使用 AWS.CloudFront.Signer的主要内容,如果未能解决你的问题,请参考以下文章
如何从无服务器 cli 设置 Cloudformation 完全访问权限
如何在 Lambda 函数中使用 AWS.CloudFront.Signer
如何通过在 AWS CLI 中使用其 ARN 来获取 lambda 函数?