自定义授权功能使用说明

ludai发表于:2019年08月19日 17:03:55更新于:2021年04月16日 16:21:59

配置自定义授权页地址,验证成功后才可以进入观看直播(需要具有开发能力)可实现验证观众身份后观看、关注公众号后观看等授权等自定义授权观看形式

授权流程图:

image.png


使用步骤:

1、功能开通,联系商务开通 S3 套餐或专属套餐,开启『自定义授权』功能

2、功能位置,登录控制台 manage.shangzhibo.tv - 进入活动 - 观看授权 -自定义授权

3、配置授权页地址,配置你的自主授权页面地址

image.png

4、复制密钥,配置完成后,点击『提交』,系统自动生成构造 token 需要的密钥

image.png

5、生成常规令牌(token)

const timestamp = Date.now();
const key = 'secret-key';
const sign = md5(`${timestamp}-${key}`)
const token = `${timestamp}-${sign}`

chrome 浏览器开发者工具生成 timestamp 演示:

注意需要使用当前时间生成 timestamp ,默认 10 分钟后失效

image.png

在线 md5 加密工具生成 key 演示:

image.png

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

一次性令牌: https://shangzhibo.tv/watch/6136209?token=O-1597134852061-uEYPyjXfi4KeyVVy-b97d2582c2e03ed8d73ffc4ac4b372ab

试看令牌:https://shangzhibo.tv/watch/6136209?token=TE-1617947152835-600-uEYPyjXfi4KeyVVy-efe0090ab43fc072947e10f36cdbe367




    您需要登录后才可以回复