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

时间:2014-04-29 21:21:27

标签: angularjs backbone.js ember.js

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

障碍是无法在img标记上设置请求标头。

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

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

1 个答案:

答案 0 :(得分:9)

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

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

This post似乎有一个非常详细的使用AngularJS和Amazon保护图像的教程。

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

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

  2. 您可以use cookies来控制访问权限。因为这些将在获取图像时由浏览器发送。

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

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

    您还应该问的是,是否需要保护这些资产以防止泄露的URL。在许多情况下,只需将资产网址保密(在某处使用随机生成的值)并仅将其显示给有权访问的用户,这是一个充分的解决方案。