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