如何提供通过HTTP身份验证保护的文件下载
How to serve a download of a file which is protected via HTTP authentication
在服务器上,我有几个通过HTTP身份验证保护的文件。
现在我想在HTML页面上创建下载按钮来下载这些文件。我已经读到,由于安全原因,通过JavaScript/AJAX下载文件是不可能的。请看这个问题
此外,通过像这样的"正常"下载链接/按钮:<a href="..." download>
是不可能设置HTTP报头来提供HTTP认证的。
是否有可能使下载按钮/链接到一个文件与HTTP基本认证。
此外,为了给出更多关于我的用例的细节,我不想使用会话。
您可以在url:
中尝试username:password
语法。<a href="username:password@example.com/file.zip">Download</a>
但是,请注意浏览器制造商出于安全原因已经开始取消对此的支持。IE和Chrome不再支持。
解决方案
作为一种变通方法,您可以在服务器上发出请求,而不是直接从浏览器中的HTML发出请求。只需编写一个简单的脚本,接受请求并获取受密码保护的文件。
下面是一个使用express
和request
的简单node.js示例:
var express = require('express');
var request = require('request');
var app = express();
app.get('remote-file',function(req,res){
request.get('username:password@example.com/file.zip').pipe(res);
});
app.listen(80);
请求模块支持username:password
语法
我有同样的问题,唯一的区别是我使用JWT进行身份验证。
但是这个原则仍然适用。你说你不想使用会话,所以这让我认为你可以访问后端。
你能做的就是用auth保护路由(/generate-token)。在这里,您将创建一个令牌以及它的创建时间和所请求的文件。然后,您将有另一个路由(/download-file/{token}),在那里您将根据提供的令牌执行实际的下载。请注意,第二条路由不是auth保护的。
令牌可以一次使用,并且只能在有限的几分钟内可用,以提高安全性。
通过实现这种方法,您将额外需要数据库中的一个表,可能还需要一个cron来定期删除未使用和过期的令牌。
- asp.net网站文件下载历史记录
- Firefox,如何提交表单触发文件下载,但停留在网页上
- 使用对数据库的写入权限保护文件
- Interent Explorer中的数据URI文件下载
- 将页面上的文本替换为 jQuery 并提示文件下载
- JavaScript文件下载
- 是否可以触发文件下载到用户的浏览器
- Javascript JSON 到 Excel 文件下载
- 使用Javascript将多个文件下载为zip文件或文件夹
- 巴比伦JS-场景从本地文件下载
- 文件下载html与错误处理FileNotFound
- 使用jQuery捕获站点范围内的文件下载
- 在WinJS中将文件下载到文件系统
- JQuery启动文件下载,然后运行一个函数
- 文件下载无法在firefox上运行
- 创建文件下载js
- 如何使用JQuery禁用pdf文件下载选项
- 使用JavaScript/Jquery创建文本文件下载/更新到本地客户端机器中的特定位置
- CollectionFS中是否存在用于文件下载的事件侦听器/回调
- 如何提供通过HTTP身份验证保护的文件下载