独立授权

功能路径

我的直播 --> 频道设置-->观看条件设置-->独立授权

功能介绍

打开直播观看页的时候URL需带上指定的参数,经过直播系统验证请求合法后,直接进入直播观看页,同时将用户所传参数作为观看页的观众信息进行设置,要求接口返回的观众账号具有唯一性,即同一个账号不能在两个地方同时登录,较早登录的账号会被踢出。

1、Secretkey:用于校验签名的生成。

独立授权流程详解

1、将频道设置为独立授权后,通过后台或者api接口获取到用户独立授权观看条件的secretkey。

2、在请求保利威直播观看页时需带上相关参数,如:https://live.polyv.cn/watch/1965681?userid=1b448be323&ts=1498547407000&sign=dd9dc9e42ad7c0204398e925a4ee0f46&nickname=viewerTests&avatar=http://livestatic.videocc.net/assets/wimages/missing_face.png

3、直播系统会对用户提交的sign参数的值做比较判断是否合法,一次成功请求后,该链接将失效(sign只能成功使用一次),如果合法,直播系统将使用nickname、userid、avatar,进入到保利威视直播观看页聊天区将显示学员的昵称和头像。如果验证失败,则显示错误页面。

在线API调用

请求参数描述

参数名
必选
类型
说明

userid

true

String

观众id,重复id时先登录的观众会被踢出直播间【仅支持英文大小写、数字和下划线,长度最大64位字符,超出64位的部分将被截取不做记录】。注意userid中的i为小写

ts

true

Long

当前13位毫秒级时间戳,3分钟内有效

sign

true

String

用于校验的签名,生成规则是secretkey + userid + secretkey + ts进行MD5加密

nickname

true

String

观众昵称,需要进行url安全的base64编码

avatar

false

String

观众头像的url地址

vid

false

String

回放视频id,如需回放某个回放视频,则需要传该参数,如:e07738ddd6 该值可使用接口【查询视频库列表】返回的videoId

param4

false

String

统计观众观看日志的自定义参数,需要先进行base64加密后再进行urlencode

param5

false

String

统计观众观看日志的自定义参数,需要先进行base64加密后再进行urlencode

failRedirectUrl

false

String

独立授权验证失败则转跳到该url,不填则跳转默认失败页

secretData

false

String

存放目标参数(SM2)加密后的字符串

参数加密

支持SM2的加密方式,加密的参数列表: userid、nickname、param4、param5

SM2加密说明

参数名
支持加密
类型
说明

userid

Y

String

观众用户ID,加密可选

nickname

Y

String

观众昵称,加密可选

param4

Y

String

参数4,加密可选

param5

Y

String

参数5,加密可选

secretData

N

String

存放目标参数加密后的字符串

加密样式

watch_url?userid=xx&nickname=xx&ts={ts}&sign=md5(secretkey + userid + secretkey + ts)&secretData=SM2(userid={userid}&nickname={nickname}&param4={param4}&param5={param5})
secretData存放加密后的值,加密之前的值: userid={userid}&nickname={nickname}

参数组装

签名: 参与加密的参数真实值用于签名,签名方式保持不变。

需要注意的时候,加密后参数长度变大,考虑到浏览器GET请求参数总长的限制,需要控制参数值的长度,参数总长度1k个字符为大部分浏览器支持.

解密

解密后的参数,将取代外层对应的参数值,若解密后没有对应的参数或值为空不填充,则保持原值.外层参数可以用一些随机值来占位,例如userid=test&nickname=test&param4=test&param5=test

例如

场景1: SM2(userid={userid}&nickname={nickname}) 解密后将替换外层的明文参数userid、nickname

场景2: SM2(userid={userid}&nickname={nickname}&param4={param4}) 解密后将替换外层的明文参数userid、nickname、param4

场景3: SM2(userid={userid}&nickname={nickname}&param5={param5}) 解密后将替换外层的明文参数userid、nickname、param5

场景4: SM2(userid={userid}&nickname={nickname}&param4={param4}&param5={param5}) 解密后将替换外层的明文参数userid、nickname、param4、param5

代码示例(Java)

    //TODO 设置为独立授权的SecretKey
    private static final String DIRECT_SECRET_KEY = "******";
    
    public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        String url = "https://live.polyv.cn/watch/";
        //TODO 设置为独立授权的频道号
        String channelId = "2292421";
        //TODO 设置观众id,同一个观众id,后面进入的会把前面的观众挤出频道
        String userId = "sadboy";
        String ts = String.valueOf(System.currentTimeMillis());
        
        //url安全的base64编码
        String nickname = "保利威";
        nickname = new String(org.apache.commons.codec.binary.Base64.encodeBase64URLSafe(nickname.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
        
        String avatar = "http://live.polyv.net/assets/images/avatars/9avatar.jpg";
        String sign = DIRECT_SECRET_KEY+userId+DIRECT_SECRET_KEY+ts;
        sign = LiveSignUtil.md5Hex(sign);
        url += channelId+"?userid="+userId+"&ts="+ts+"&sign="+sign+"&nickname="+nickname+"&avatar="+avatar;
        //浏览器直接访问url即可进入直播间
        System.out.println(url);
    }

代码示例(PHP)

<?php
$secretkey = "qwertyui"; //后台secretKey
$userid = "test" . rand(0, 5); //直播的用户ID
$ts = time() * 1000; //当前时间
$sign = md5($secretkey . $userid . $secretkey . $ts); //用于校验的sign
$nickname = urlencode(base64_encode("保利威")); //学员的昵称
$avatar = "http://live.polyv.net/assets/images/avatars/9avatar.jpg"; //学员的头像
$url = "https://live.polyv.cn/watch/108008";
$callbackUrl = $url . "?userid=" . $userid . "&nickname=" . $nickname . "&avatar=" . $avatar . "&ts=" . $ts . "&sign=" . $sign;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>login</title>
</head>
<body>
<div id="btn">
<input type="button" onclick="openurl()" value="独立授权观看" class="btn" >
</div>
<script>
function openurl(){
location.href="<?php
echo $callbackUrl ?>";
};
</script>
</form>
</body>
</html>

展示效果

http://demo.ipolyv.cn/wfy/directAuth.php

注意事项

1、要保证提交的userid的唯一性,当多个观众使用同一个userid进入观看页时,较早登录的观众会被后面登录的观众踢出,观看页会提示 "帐号在另外的地方登录,您将被退出观看。如下图:

Last updated

Was this helpful?