配置自定义授权页地址,验证成功后才可以进入观看直播(需要具有开发能力)可实现验证观众身份后观看、关注公众号后观看等授权等自定义授权观看形式
授权流程图:
使用步骤:
1、功能开通,联系商务开通 S3 套餐或专属套餐,开启『自定义授权』功能
2、功能位置,登录控制台 manage.shangzhibo.tv - 进入活动 - 观看授权 -自定义授权
3、配置授权页地址,配置你的自主授权页面地址
4、复制密钥,配置完成后,点击『提交』,系统自动生成构造 token 需要的密钥
5、生成常规令牌(token)
const timestamp = Date.now(); const key = 'secret-key'; const sign = md5(`${timestamp}-${key}`) const token = `${timestamp}-${sign}`
chrome 浏览器开发者工具生成 timestamp 演示:
注意需要使用当前时间生成 timestamp ,默认 10 分钟后失效
在线 md5 加密工具生成 key 演示:
Token(令牌)构造:1566286417058-3ee7b145f9dd9bda0f2fc200189fa197
6、 生成一次性令牌 (token)
一次性令牌顾名思义,即令牌只能使用一次,并且一次性令牌有过期时间,生成后请尽快使用。目前一次性令牌的过期时间暂时定为 10 分钟,后续可能会根据情况进行调整,请勿过分依赖此时间。一次性令牌与常规令牌的区别在于,一次性令牌以 O- (大写字母 O 与横线) 开头标识,并且在生成过程中需要 10 ~ 20 位之间的随机字符串(字符串不要重复使用)加以混淆。
一次性令牌正则表达式校验规则: ^O-\d{13}-\w{10,20}-[a-f0-9]{32}$
function randomString(length, chars) { chars = chars || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; let result = ''; for (let i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; return result; } const timestamp = Date.now(); const key = <secret-key>; const nonceStr = randomString(16); const sign = md5(`O-${timestamp}-${nonceStr}-${key}`); const token = `O-${timestamp}-${nonceStr}-${sign}`;
一次性令牌 (token) 示例: O-1597134852061-uEYPyjXfi4KeyVVy-b97d2582c2e03ed8d73ffc4ac4b372ab
7、生成试看令牌
试看令牌,即对于相关活动,用户可以试看多少时间,当观看超过该时长之后,则跳转到对应的自定义授权页面进行授权。该令牌存在可重复试看和不可重复试看两种模式。
试看令牌说明:
如果为可重复试看令牌,则用户观看超过限制时长后,可以重新授权,若为不可重复试看令牌,则不可重新授权
试看令牌可以被一次性令牌、常规令牌覆盖,即用户使用试看令牌授权后,又使用常规令牌进行了授权,则当前用户的授权方式为常规令牌授权
试看令牌参数说明:
以 TE- (大写字母TE与横线)开头标识。
timestamp 为时间戳,单位毫秒
duration 为 指定用户可以试看的时长,单位为秒,比如用户可以试看10分钟, 则 duration 应设置为600
repeat 为是否允许重复试看,取值 1 或 0,1 表示允许试看,0 表示不允许试看
secret 为在平台配置自定义授权设置时颁发的用于加密的秘钥
nonceStr 为10 ~ 20 位之间的随机字符串(该字符串不要重复使用,否则可能造成令牌冲突)
function randomString(length, chars) { chars = chars || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; let result = ''; for (let i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)]; return result; } const timestamp = Date.now(); const duration = 600; const nonceStr = randomString(15); const repeat = '1'; const sign = md5(`${timestamp}-${duration}-${repeat}-${secret}-${nonceStr}`); const token = `TE-${timestamp}-${duration}-{repeat}-${nonceStr}-${sign}`;
试看令牌(token)示例:TE-1618560795067-600-1-ezgokufijizweri-757d23590a522bfcd7b323847b9187d4
8、带上令牌的访问地址
常规令牌: https://shangzhibo.tv/watch/6136209?token=1566286417058-3ee7b145f9dd9bda0f2fc200189fa197