在我的Ember / Angular / Backbone应用程序中从cookie转移到基于令牌的身份验证时,我遇到了麻烦。
问题是无法在img标签上设置请求标头。
有些人建议将令牌参数附加到请求的末尾,从而使用auth令牌乱丢服务器日志。
使用基于令牌的身份验证访问受保护的内联资产的正确方法是什么(如果有的话)?
在我的Ember / Angular / Backbone应用程序中从cookie转移到基于令牌的身份验证时,我遇到了麻烦。
问题是无法在img标签上设置请求标头。
有些人建议将令牌参数附加到请求的末尾,从而使用auth令牌乱丢服务器日志。
使用基于令牌的身份验证访问受保护的内联资产的正确方法是什么(如果有的话)?
重要的警告:我不是安全专家(但我涉猎)
在过去,我使用Amazon S3及其基于令牌的资产安全性。这些允许您生成私有甚至临时URL以进行资产访问。您也可以在自己的服务器上实现类似的机制,但请记住,您现在将自己托管和提供资产,因此请记住带宽使用,缓存等问题。
这个帖子 似乎有一个非常详细的教程,使用AngularJS和亚马逊保护图像。
如果您不想使用亚马逊路线,您需要自己实施某种令牌/安全方案,并且您可以采取多种方法。它在很大程度上取决于您想要的安全级别。
您可以在没有URL的情况下以编程方式加载图像数据。应该可以使用CSS和 base64数据URI 实现这一目标。您可以为数据发出AJAX请求并填充数据URI。虽然这绝对安全,但也可能效率低下。
你可以 使用cookies 控制访问。因为这些将在获取图像时由浏览器发送。
您可以使用安全的标记化URL的自定义实现 https://host/secure_images/{tokenized_access_url}.jpg
。就像S3一样。您甚至可以在一段时间后使此令牌过期。
根据您的需要,您可能会发现其中一些技术会损害您利用缓存的能力。这就是为什么使用S3 / Cloudfront可能是安全性和效率方面的最佳选择。
您还应该问的是,是否需要保护这些资产以防止泄露的URL。对于许多情况,只需将资产URL保密(在某处使用随机生成的值)并仅向具有访问权限的用户显示它就足够了。