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

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

然而,这种方法并不起作用。我一直收到错误信息“进程在完成请求前退出”。我尝试了许多'选项'参数格式的排列组合,但没有任何改变。任何帮助都将不胜感激。

日志里没有其他的信息吗? - Michael - sqlbot
1个回答

8

原来我的私钥格式不正确。它需要包括“-----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,但没有成功!签名URL和签名Cookie之间有什么区别吗? - Sabreena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接