与nodejs一起提供时保护远程资源

时间:2014-12-23 12:03:30

标签: node.js

这更像是一个涉及nodejs作为实现的架构问题。

我有一个文件夹没有透露我想要提供给用户的网络服务器文件。

nodejs应该将资源暴露给最终用户的方式是通过一次性链接,一次消耗不再可用。 用户通过整个体验永远不会知道文件的真实位置。

我确信这是一种常见的架构模式,但我从未实现类似的东西。 考虑可扩展性,资源不应该在HD或RAM上进行复制,如果可能,解决方案不应该在数据库令牌跟踪系统上进行中继。

我不需要代码实现,但需要详细解释如何实现它

非常感谢

2 个答案:

答案 0 :(得分:4)

避免依赖数据库的一种方法是在文件系统中创建一个符号链接(基于令牌),在请求之后将被删除。虽然在窗户上不会令人满意。

示例(伪):

  • 创建令牌(guid或类似)
  • symlink guid - >实际档案
  • 请求完成后,删除符号链接

但是,我不认为有一种可靠的方法可以知道文件是否已成功下载,因此您可以更好地为此做好准备。完全下载文件时的某种pingback可能是我现在能想到的最可靠的方式。

要获得可伸缩性,请确保符号链接位于共享文件系统上。虽然在同一台服务器上集群的node.js实例也没问题。

如果需要将其限制为经过身份验证的用户,则可以将guid与auth令牌结合使用,并在查找文件之前添加/附加它。

答案 1 :(得分:4)

  • 为用户提供Cookie
  • 在Cookie和用户生成的ID之间创建一个临时关联(在db中)(如果你想要花哨的话,可以使用它的哈希值)
  • 为用户提供ID

当用户按ID请求资源时:

  • 测试ID(或其哈希,如果你想要花哨)是否在数据库中
  • 如果是,请为用户提供资源并销毁用户与资源ID之间的关联

有一个db令牌跟踪系统。嘿,这是唯一的方法。