独立授权
功能路径
我的直播
--> 频道设置
-->观看条件设置
-->独立授权
功能介绍
打开直播观看页的时候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,进入到保利威视直播观看页聊天区将显示学员的昵称和头像。如果验证失败,则显示错误页面。
请求参数描述
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地址
param4
false
String
统计观众观看日志的自定义参数,需要先进行base64加密后再进行urlencode
param5
false
String
统计观众观看日志的自定义参数,需要先进行base64加密后再进行urlencode
failRedirectUrl
false
String
独立授权验证失败则转跳到该url,不填则跳转默认失败页
secretData
false
String
存放目标参数(SM2)加密后的字符串
参数加密
支持SM2的加密方式,加密的参数列表: userid、nickname、param4、param5
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}¶m4={param4}¶m5={param5})
secretData存放加密后的值,加密之前的值: userid={userid}&nickname={nickname}
参数组装
签名: 参与加密的参数真实值用于签名,签名方式保持不变。
需要注意的时候,加密后参数长度变大,考虑到浏览器GET请求参数总长的限制,需要控制参数值的长度,参数总长度1k个字符为大部分浏览器支持.
解密
解密后的参数,将取代外层对应的参数值,若解密后没有对应的参数或值为空不填充,则保持原值.外层参数可以用一些随机值来占位,例如userid=test&nickname=test¶m4=test¶m5=test
例如
场景1: SM2(userid={userid}&nickname={nickname}) 解密后将替换外层的明文参数userid、nickname
场景2: SM2(userid={userid}&nickname={nickname}¶m4={param4}) 解密后将替换外层的明文参数userid、nickname、param4
场景3: SM2(userid={userid}&nickname={nickname}¶m5={param5}) 解密后将替换外层的明文参数userid、nickname、param5
场景4: SM2(userid={userid}&nickname={nickname}¶m4={param4}¶m5={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?