我正在 Angular 中编写一个 web 应用程序,其中身份验证由 JWT 令牌处理,这意味着每个请求都有一个包含所有必要信息的“身份验证”标头。
这对于 REST 调用非常有效,但我不明白我应该如何处理托管在后端的文件的下载链接(文件驻留在托管 web 服务的同一台服务器上)。
我不能使用常规<a href='...'/>
链接,因为它们不会携带任何标头并且身份验证将失败。的各种咒语也一样window.open(...)
。
我想到的一些解决方案:
- 在服务器上生成一个临时的不安全下载链接
- 将认证信息作为url参数传递,手动处理case
- 通过XHR获取数据并保存文件客户端。
以上都不尽如人意。
1 是我现在使用的解决方案。我不喜欢它有两个原因:首先它在安全方面不是理想的,其次它可以工作但它需要大量的工作,尤其是在服务器上:下载一些东西我需要调用一个服务来生成一个新的“随机" url,将其存储在某处(可能在 DB 上)一段时间,然后将其返回给客户端。客户端获取 url,并使用 window.open 或类似的。当请求时,新的 url 应该检查它是否仍然有效,然后返回数据。
2 似乎至少一样多的工作。
3 似乎有很多工作,即使使用可用的库,还有很多潜在的问题。(我需要提供自己的下载状态栏,将整个文件加载到内存中,然后要求用户将文件保存在本地)。
不过,这项任务似乎是一项非常基本的任务,所以我想知道是否有更简单的东西可以使用。
我不一定要寻找“角度方式”的解决方案。常规的 Javascript 就可以了。