node.js - 在 Meteor 中正确启用 filepicker.io 的安全性

标签 node.js amazon-s3 meteor filepicker.io cryptojs

默认情况下,Filepicker 几乎允许每个人将文件添加到您的 S3 存储桶,他们足够聪明,可以从客户端代码中复制您的 API key ,幸运的是,它还提供了带有过期策略的安全选项。

但我不知道如何在 Meteor.js 中实现它。来回尝试,安装meteor-crypto-base包,尝试在服务器上生成哈希值,在https://github.com/RGBboy/urlsafe-base64上尝试了RGBboy的urlsafe-base64算法。但我只是没有进一步了解。也许有人可以帮忙!预先感谢您。

最佳答案

这是一个如何在 Meteor 中进行文件选择器签名 URL 的示例,基于文档 here :

var crypto = Npm.require('crypto');
var FILEPICKER_KEY = 'Z3IYZSH2UJA7VN3QYFVSVCF7PI';
var BASE_URL = 'https://www.filepicker.io/api/file';

Meteor.methods({
  signedUrl: function(handle) {
    var expiry = Math.floor(new Date().getTime() / 1000 + 60 * 60);

    var policy = new Buffer(JSON.stringify({
      handle: handle,
      expiry: expiry
    })).toString('base64');

    var signature = crypto
      .createHmac('sha256', FILEPICKER_KEY)
      .update(policy)
      .digest('hex');

    return BASE_URL + "/" + handle +
      "?signature=" + signature + "&policy=" + policy;
  }
});

请注意,这需要存在于您的 server 目录中的某个位置,这样您就不会将 key 发送给客户端。为了证明它的工作原理,在客户端您可以这样调用它:

Meteor.call('signedUrl', 'KW9EJhYtS6y48Whm2S6D', function(err, url){console.log(url)});

如果一切正常,您在访问返回的网址时应该会看到一张照片。

关于node.js - 在 Meteor 中正确启用 filepicker.io 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18546676/

相关文章:

meteor - meteor 在哪里存放它的包裹?

node.js - node.js 的 API 网关示例

c# - 无法使用 S3 TransferutilityUploadRequest 上传文件

node.js - 发布新版本包时获取电子邮件通知

node.js - 如何在将图像上传到 AWS S3 时添加对图像的公共(public)访问

amazon-s3 - 云锋 : How to clear cache

angularjs - 将 MeteorJS 添加到现有的 AngularJS/MEAN 堆栈应用程序

javascript - MongoDB/JS : find the minimum (earliest) date

javascript - PythonJS 本地服务器

javascript - 尽管安装了它但找不到 npm 模块