2016-04-24 103 views
7

的问题创建Django的会话令牌从

我目前正在争夺从Django的服务认证强制媒体文件的众所周知的问题。这个问题的背景很简单:

  • 我们要使用Django的媒体文件支持
  • 媒体文件默认情况下不私。事实上,通常情况下,网络服务器直接提供服务。
  • 我们要进行身份验证的用户访问
  • 我们正在使用的前端令牌认证
  • 由于没有有效的会话,浏览器无法访问私人文件(如打开时的身份验证的媒体文件时,在新标签页PDF)
  • 我们希望Django的为浏览器提供认证,但需要使用现有的身份验证令牌以某种方式进行身份验证
  • 我们仍然希望nginx的发送文件回来,所以我们将充分利用认证后X-Accel-Redirect

试图解决

我到目前为止已经完成(和它的作品)是创建需要令牌认证和文件发送回另一个API视图,然后创建了一个角指令换出所有受保护的URL都有一个blob。当用户点击链接时,它使用令牌认证获取文件,然后创建一个包含该数据的blob。浏览器然后打开该blob。

不幸的是,blob无法共享,所以用户无法为这些文件粘贴链接。我想知道是否有解决办法。

目标

我的目标是使用令牌创建有效的(短期满)会议。这样,当用户点击一个链接时,会发送一个请求来检查是否有有效的会话,然后以某种方式配置浏览器,以便它可以使用该会话。整个过程看起来就像这样:

  • 用户点击链接(这实际上是一个比较复杂的角度指令)
  • 会话角火灾请求服务器
  • 服务器提供必要的信息响应
  • 使用JavaScript配置浏览器会话
  • 强制浏览器打开新建会话的链接
  • 根据会话验证用户,使用标头将文件发送到nginx

我不是在寻找一个实现的答案,我可以自己处理好细节。我更感兴趣的是获得有关如何以最佳方式完成这一任务的反馈。即:

  • 如何在API响应中给出一些会话信息来配置浏览器?
  • 我应该如何处理这些会话过期以确保安全
  • 我应该如何建立此会话?每次点击链接时检查/创建会话是否合理(假设流量在这里没有问题)
  • 这是一个合理的跨浏览器解决方案吗?有更好的方法吗?
  • 当文件URL与没有会话但拥有有效令牌的用户共享时,如何使用中间页面建立此会话?

一些选项

更新:我已经与已经提出了下列选项的一些同事说:

  • 而不是一个会话,使API检索单个使用或短期过期令牌并将其附加到文件的URL作为查询参数。在请求中验证它。这有效,但仍然不允许分享这些网址。
  • 登录时建立会话。如果该会话在用户尝试访问文件时过期,则重定向到会话登录名,然后在通过身份验证时重定向回文件。这也适用,但我想避免额外的身份验证步骤,因为令牌有很长的到期时间,会话有一个短的。给他们同样的失效也会有弊端,因为更经常失效的代币或不经常失效的代码并不理想。
+0

你的最终目标是什么?在用户之间共享文件?用户在访问文件之前是否应该登录?共享链接/文件的规则/条件是什么?用户是否可以共享每个文件?谁可以访问哪些文件以及如何为每个文件设置权限? – WayBehind

+0

用户必须先登录才能查看文件。他们通常会事先登录,否则将被重定向到登录。所有用户都可以看到所有文件。目标是进行身份验证,同时仍允许用户将链接粘贴到其他用户。身份验证非常简单(如问题中所述)。问题在于验证并仍然允许共享。 –

+0

如果用户必须先登录才能看到这些文件,那么在访问该文件之前,哪些因素会阻止您验证每个用户?还有一点我不清楚的是,“验证,同时仍允许用户将链接粘贴到其他用户” 。验证什么?用户?用户已经登录了吗? “粘贴其他用户的链接”是什么?粘贴在哪里?出于什么目的?是不是每个用户访问文件需要登录? – WayBehind

回答

1

您可以简单地将令牌放入cookie中。

这样,它将被浏览器自动发送到服务器,并且您可以在用户直接访问可下载文件时使用它进行身份验证。

而不是阅读Authorization:标题,告诉您的Django中间件从cookie中读取标记字符串。

+0

由于令牌过期比正常会话的频率低,是否会对此产生任何安全隐患? Cookie可能会存在更长的时间。我觉得如果使用唯一的情况是在验证文件查看时,它应该没问题。这是一个安全的假设吗? SSL在网站上随处可见。 –

+0

您可以只设置cookie的“expires”值一段时间,以便它在设置后的某个时间消失。但是,再次,您可能会将令牌字符串存储在客户端的localStorage中,因此有权访问该计算机的攻击者也可以从该处读取该令牌。 – C14L

+0

[本文后半部分比较](https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/)使用cookie的安全优点和缺点或标题令牌。 – C14L