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

缺点是无法在img标签上设置请求 header 。

有人建议将 token 参数附加到请求的末尾,从而使带有身份验证 token 的服务器日志乱丢。

使用基于 token 的身份验证访问 protected 嵌入式 Assets 的正确方法是(如果有的话)?

最佳答案

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

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

This post似乎有关于使用AngularJS和Amazon保护图像的相当详细的教程。

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

  • 您可以以编程方式加载没有URL的图像数据。应该可以使用CSS和base64 data URIs完成此操作。您可以对数据进行AJAX请求,然后填充数据URI。尽管这绝对是安全的,但它也可能是低效的。
  • 您可以use cookies来控制访问。因为这些将在获取图像时由浏览器发送。
  • 您可以使用安全的,已标记化的URL(例如https://host/secure_images/{tokenized_access_url}.jpg)的自定义实现。就像S3一样。您甚至可以使此 token 在一段时间后过期。

  • 根据您的需求,您可能会发现其中一些技术会损害您利用缓存的能力。因此,就安全性和效率而言,使用S3/Cloudfront可能是最佳选择。

    您还应该问的是,是否需要保护这些 Assets 以防止URL泄露。在许多情况下,只需将 Assets url保持私有(private)(在某个地方使用随机生成的值),然后仅将其显示给有访问权限的用户即可,这是一个足够的解决方案。

    关于angularjs - 如何使用基于 token 的身份验证来内联访问 protected Assets ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23375518/

    10-12 12:21
    查看更多