如何在Lambda函数中使用AWS.CloudFront.Signer

我正在尝试使用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'); } }); }; 

但是,这是行不通的。 我不断收到错误“完成请求之前退出进程”。 我已经尝试了很多的“选项”参数的格式排列,没有任何区别。

任何帮助,将不胜感激。

原来我的私钥格式不正确。 它需要包括“—– 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-----'; 

有了这个改变一切正常。