我正在Angular中编写一个webapp,其中身份验证由JWT令牌处理,这意味着每个请求都有一个带有所有必要信息的"身份验证"标头.
这适用于REST调用,但我不明白我应该如何处理后端托管的文件的下载链接(这些文件驻留在托管webservices的同一服务器上).
我不能使用常规<a href='...'/>链接,因为它们不会携带任何标头,验证将失败.同样的各种咒语window.open(...).
我想到的一些解决方案:
以上所有都不太令人满意.
1是我现在使用的解决方案.我不喜欢它有两个原因:首先它不是理想的安全性,其次它可以工作,但它需要相当多的工作,特别是在服务器上:下载一些我需要调用一个生成一个新"随机"的服务"url,将它存储在某个地方(可能在数据库上)一段时间,并将其返回给客户端.客户端获取URL,并使用window.open或类似的.请求时,新URL应检查它是否仍然有效,然后返回数据.
2似乎至少同样多的工作.
3看起来很多工作,甚至使用可用的库,以及许多潜在的问题.(我需要提供自己的下载状态栏,将整个文件加载到内存中,然后要求用户在本地保存文件).
这个任务似乎是一个非常基本的任务,所以我想知道是否有更简单的东西我可以使用.
我不一定在寻找"Angular方式"的解决方案.常规Javascript会没事的.
在我们的网站上,我们根据用户的私人信息(通过表格提供)向用户提供模拟.我们希望以后允许他们重新使用他们的模拟结果,但不要强迫他们创建登录/密码帐户.
我们曾想过给他们发送一封带有链接的电子邮件,他们可以从中获取结果.但是,当然,我们必须保护此URL,因为私有数据受到威胁.
因此,我们打算在URL中传递令牌(如字母和数字的40个字符组合,或MD5哈希)并使用SSL.
最后,他们会收到这样的电子邮件:
您好,
请在https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn上取回您的搜索结果
你怎么看待这件事?它足够安全吗?你会为我的令牌生成提出什么建议?如何在https请求中传递URL参数?
更新 20140702:
(但我将其他一个答案标记为接受而不是我自己的答案,因为它让我在那里一半,并奖励努力)
似乎无法通过链接设置HTTP请求标头<a href="...">,并且只能使用XMLHttpRequest.
但是,链接到的URL是应该下载的文件(浏览器不应该导航到它的URL),我不确定这是否可以使用AJAX完成.
此外,返回的文件是二进制文件,而AJAX不适用于此.
如何使用添加了自定义标头的HTTP请求触发文件下载?
编辑:修复损坏的链接
javascript ×2
ajax ×1
angularjs ×1
download ×1
http-headers ×1
https ×1
jwt ×1
security ×1
token ×1
url ×1