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