我正在尝试构建一个个人iOS应用程序来观看我最喜欢的电视频道。为此,我分析了一个提供直播电视服务的网站。我注意到他们正在使用HLS协议。
通过使用firebug,我可以看到chunklist链接,然后我使用MPMoviePlayerController
或AVPlayerViewController
来播放实时视频。它完美地运作
现在,我还注意到每个chunklist链接在其末尾都包含一个参数“token”。例如:
.../chunklist_b300000.m3u8?token=eyJoYXNoX3ZhbHVlIjogIjQ4OWUwMGIzN2Y4ZTNlYzRlZTI4Zjg0N2I3NjQxNDEyIiwgInNlcnZlcl90aW1lIjogMTQ1NDYyNjcxMCwgImNoYW5uZWxfaWQiOiAidnRjNyIsICJ2YWxpZF9taW51dGVzIjogMTQ0MH0
我可以多次使用此链接,但仍然有效。但是,如果我在两个设备上同时使用相同的令牌,则效果不佳。我想,经过一段时间,比如几天,令牌将过期。
因此,我想知道他们是如何生成令牌的。我试图用firebug检测一切,但我找不到答案。这是网站:
livetv
是否有标准方法来生成令牌?以及每次打开我的应用程序时如何获取新令牌?
答案 0 :(得分:1)
没有生成(安全)令牌的标准方法。
大多数服务器通过组合ip,mac-addresss,某种类型的客户端uuid和secret keyworld
来生成令牌。然后使用加密强大的算法(如SHA-1或SHA-3和base64编码)对结果进行散列,以便于使用。
即使您知道合并方案和散列算法,您仍然不会知道secret keyword
而且您自己也无法生成令牌。
某些服务器会生成一个不会自行携带任何信息的唯一令牌。而是服务器将它(使用某种数据库)与一些内部信息(如令牌有效性,到期日期等)相关联。在这种情况下,令牌本身只与服务器的状态无关。
生成新令牌的一种方法是向服务器发出请求,通过浏览器欺骗普通/有效用户,然后解析响应以获取令牌。