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

标签 node.js amazon-web-services lambda amazon-cloudfront

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

通过此更改,一切正常。

关于node.js - 如何在 Lambda 函数中使用 AWS.CloudFront.Signer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38305980/

相关文章:

python - 每个 HIT 创建的作业不能超过 10 个

amazon-web-services - 使用 aws education 访问 aws root 用户

django - 从 AWS S3 存储桶加载图像时出现访问被拒绝错误

c# - lambda 表达式中的 Where 条件 c#

node.js - forever.list 在 node.js 代码中返回 null

javascript - 在第二个请求中使用 oauth token - NODEJS

node.js - 如何在 Express 中生成 CSRF token ?

ruby-on-rails - CORS 开发政策阻止的所有请求

python - 将 python 对象转换为列表的列表

lambda - 如何仅使用 lambda 表达式在 Racket(或 Scheme)中编写等于谓词