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