Node.js 与NodeJ一起使用时保护远程资源
这更像是一个涉及nodejs实现的架构问题 我有一个文件夹,该文件夹没有被我想提供给用户的Web服务器文件公开 NodeJ向最终用户公开资源的方式是通过一个一次性链接,该链接一旦被使用就不再可用。 通过整个体验,用户永远不会知道文件的真实位置 我确信这是一种常见的架构模式,但我从未实现过类似的东西。 从可伸缩性来看,资源不应该在HD或RAM上复制,如果可能的话,解决方案不应该在DB令牌跟踪系统上中继 我不需要代码实现,但需要一个关于如何实现它的详细说明Node.js 与NodeJ一起使用时保护远程资源,node.js,Node.js,这更像是一个涉及nodejs实现的架构问题 我有一个文件夹,该文件夹没有被我想提供给用户的Web服务器文件公开 NodeJ向最终用户公开资源的方式是通过一个一次性链接,该链接一旦被使用就不再可用。 通过整个体验,用户永远不会知道文件的真实位置 我确信这是一种常见的架构模式,但我从未实现过类似的东西。 从可伸缩性来看,资源不应该在HD或RAM上复制,如果可能的话,解决方案不应该在DB令牌跟踪系统上中继 我不需要代码实现,但需要一个关于如何实现它的详细说明 非常感谢避免依赖数据库的一种方法是在文件系
非常感谢避免依赖数据库的一种方法是在文件系统中创建一个符号链接(基于令牌),该链接将在请求后删除。但在windows上无法令人满意地工作 示例(psuedo):
- 创建令牌(guid或类似)
- 符号链接guid->实际文件
- 请求完成后,删除符号链接
- 给用户一个cookie
- 在cookie和为用户生成的ID之间创建临时关联(以db为单位)(或者,如果您愿意,可以创建它的哈希)
- 为用户提供ID
- 测试以查看ID(或者它的散列,如果你想看的话)是否在数据库中
- 如果是,则为用户提供资源并销毁用户与资源ID之间的关联
有一个db令牌跟踪系统。嘿,这是唯一的办法。某种你必须保存的令牌。好的,我的用户都有Json Web令牌。我们能用它做点什么吗?在最坏的情况下,我可以使用数据库,只是想让它更轻的Ram/HD拷贝,我的意思是在服务器端。让我们假设我拥有分区D:/中的所有资源,并且Web服务器正在E:/的子文件夹上运行。我不希望复制web服务器文件夹中的文件,或者需要使用ram作为解决方案(即:使用web流协议)哦,那么您希望将其存储在哪里?我想知道是否有正确目标的别名可以将真实目标隐藏给最终用户。@Snick您可以将http请求路由到该文件。文件路径和http请求路径不需要匹配。如何从nodejs请求发回指向Web服务器外部文件的路径?示例:/datastore是数据存储,/webserver是webserver。如何将请求localhost/1.file解析为物理文件/datastore/1.file?取决于您是否希望以静态方式提供服务。您可以只在/webserver文件夹中创建符号链接,也可以通过文件读取器路由请求并通过管道发送。如果您想添加一个额外的身份验证检查,您必须自己路由它,类似于:/download/guid.file->检查{usertoken}-{guid}.file是否作为符号链接存在(在指定的文件夹中),然后读取{usertoken}-{guid}.file并将其传送到输出流。完成后,删除符号链接。我很快实现了管道解决方案。不幸的是,我不能100%确定在呼叫管道时引擎盖下发生了什么。这是一种记忆技巧吗?这只是一个参考?当指向一个100mb的文件时,它是一个可伸缩的解决方案吗?@Snick据我所知,它应该是好的。它基本上只是两个流之间的转发,它将以接收流允许的最大速率读取。除非接收流具有无限缓冲区,否则您不应该浪费超过中间缓冲区的资源。