假设我有一个单页面应用程序,它使用JWT令牌对后端REST api进行身份验证。在执行REST请求时,我在http标头内传输JWT令牌。到目前为止,非常好。
现在,假设我想从服务器下载图像,我希望只有经过身份验证的用户才能访问该图像。在服务器上,这没有问题:只需定义一个传递图像的路由,并在该路由中验证JWT令牌。
但是:如何将令牌从客户端转移到服务器?如果我使用常规<img ...>
标记,则无法将标记附加为http标头。我该怎么办?
我基本上可以考虑添加令牌,例如base64编码,查询字符串,但似乎不是很安全,因为令牌然后出现在浏览器的历史记录中。另一方面,如果不使用JavaScript完全加载图像,我想不出另一种方法。
任何提示?
答案 0 :(得分:1)
如果我想到Amazon S3,您需要一个签名的网址。正如您已建议在查询字符串中添加令牌一样没问题。
关于安全性:我认为这是令牌的到期日期问题。由于令牌无效,因此最好使用签名网址:
通过这种方式,您可以独立于JWT控制签名URL的过期,还可以定义用于签名URL的令牌长度。