我想限制连接到我的直播页面的限制用户,这样用户就不能在同一帐户下从不同位置共享密码和多次登录。
我不介意一个用户在家里用两台不同的设备登录,比如一台电脑和一台谷歌电视。这使我认为基于源IP地址的限制是处理这个问题的正确方法。
问题是,如果用户登录,我记录他们的IP地址,并限制他们从该IP登录,他们不能改变位置。
使用HTTP,在他们登录后,它是无连接的,所以我已经失去了他们是否正在从CDN观看流的跟踪。
这让我觉得我应该在客户端使用javascript断开播放器,如果用户登录到另一个位置。
这意味着我需要以一种合理的可扩展方式与登录的客户端进行通信。
你能建议一个适当的方法来处理这个问题吗?我有一种感觉,必须有一个简单和可扩展的解决方案。这真的取决于你对绕过你的访问控制的人有多敏感。
如果你可以接受一些人绕过它们,那么你可以在客户端执行访问控制,并让客户端每60秒左右ping服务器,告诉服务器它仍在流式传输。然后在服务器上,将用户的IP地址存储在一个即将过期的队列中。因此,如果玩家停止ping服务器,IP地址将在3分钟内过期。通过ping服务器,我的意思是发送一个简单的http GET请求以保持会话打开。当用户关闭客户端时,ping将停止,并且您的服务器将在3分钟后过期该客户端的IP地址。此时,用户可以使用不同的IP地址登录。
重要的是要记住,精明的用户将能够在像Chrome这样的浏览器中观看网络事件,看到您的内容从哪里被提供,并且很容易绕过任何限制,因为您无法控制CDN本身。
如果需要更严格的控制,则需要从服务器提供内容。这样你就可以知道客户端何时停止访问流了。
可能有一个中间地带。如果你担心没有CDN的流媒体速度,你可以考虑看看CloudFlare.com。CloudFlare是一个CDN层,位于所有http请求(甚至是动态请求)的前面。静态请求从边缘提供服务,就像普通的CDN一样,但动态请求通过CloudFlare的网络反向代理,每次都返回到您的服务器。如果你设置你的流请求看起来像CloudFlare的动态内容,那么你将获得流的潜在好处,通过低延迟,高带宽连接到边缘点,同时仍然能够单独跟踪用户。