问题 如何使用基于令牌的身份验证来内联访问受保护资产?


在我的Ember / Angular / Backbone应用程序中从cookie转移到基于令牌的身份验证时,我遇到了麻烦。

问题是无法在img标签上设置请求标头。

有些人建议将令牌参数附加到请求的末尾,从而使用auth令牌乱丢服务器日志。

使用基于令牌的身份验证访问受保护的内联资产的正确方法是什么(如果有的话)?


8275
2018-04-29 21:21


起源

只是好奇,但是UI的图像部分,还是它们实际上需要保护的资产?我之前在一个项目上工作过两种类型,我们最终通过后端服务器对“受保护”图像进行图像请求以获得身份验证 - 我们认为UI图像并不关心这种方式。 - aet
资产需要得到保护。它是一个项目管理应用程序,客户可以上传图像/电影/文档/任何内容,并在其上定义acl。 UI图像是公共资产,不受保护。 - Aaron Renoir
为什么不通过Web应用程序路由图像请求?然后后端可以发送适当的标题以返回正确的图像 - Alp


答案:


重要的警告:我不是安全专家(但我涉猎)

在过去,我使用Amazon S3及其基于令牌的资产安全性。这些允许您生成私有甚至临时URL以进行资产访问。您也可以在自己的服务器上实现类似的机制,但请记住,您现在将自己托管和提供资产,因此请记住带宽使用,缓存等问题。

这个帖子 似乎有一个非常详细的教程,使用AngularJS和亚马逊保护图像。

如果您不想使用亚马逊路线,您需要自己实施某种令牌/安全方案,并且您可以采取多种方法。它在很大程度上取决于您想要的安全级别。

  1. 您可以在没有URL的情况下以编程方式加载图像数据。应该可以使用CSS和 base64数据URI 实现这一目标。您可以为数据发出AJAX请求并填充数据URI。虽然这绝对安全,但也可能效率低下。

  2. 你可以 使用cookies 控制访问。因为这些将在获取图像时由浏览器发送。

  3. 您可以使用安全的标记化URL的自定义实现 https://host/secure_images/{tokenized_access_url}.jpg。就像S3一样。您甚至可以在一段时间后使此令牌过期。

根据您的需要,您可能会发现其中一些技术会损害您利用缓存的能力。这就是为什么使用S3 / Cloudfront可能是安全性和效率方面的最佳选择。

您还应该问的是,是否需要保护这些资产以防止泄露的URL。对于许多情况,只需将资产URL保密(在某处使用随机生成的值)并仅向具有访问权限的用户显示它就足够了。


9
2018-06-20 14:55