如果您希望给某些房间中加入进房限制或者上麦限制,也就是仅允许指定的用户去进房或者上麦,而您又担心在客户端判断权限很容易遭遇破解攻击,那么可以考虑开启高级权限控制。
在如下场景下,您并不需要开启高级权限控制的:
在如下场景下,建议您开启高级权限控制以获得更佳的安全性:
iOS | Android | Mac OS | Windows | Electron | 微信小程序 | Chrome 浏览器 |
---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? |
开启高级权限控制后,TRTC 的后台服务系统就不会仅校验 UserSig 这一个“进房票据”,还会校验一个叫做 PrivateMapKey 的“权限票据”,权限票据中包含了一个加密后的 roomid 和一个加密后的“权限位列表”。
由于 PrivateMapKey 中包含 roomid,所以当用户只提供了 UserSig 没有提供 PrivateMapKey 时,并不能进入指定的房间。
PrivateMapKey 中的“权限位列表”使用了一个 byte 中的 8 个比特位,分别代表了持有该票据的用户,在该票据指定的房间中所拥有的八种具体的功能权限:
位数 | 二进制表示 | 十进制数字 | 权限含义 |
---|---|---|---|
第 1 位 | 0000 0001 | 1 | 创建房间的权限 |
第 2 位 | 0000 0010 | 2 | 进入房间的权限 |
第 3 位 | 0000 0100 | 4 | 发送语音的权限 |
第 4 位 | 0000 1000 | 8 | 接收语音的权限 |
第 5 位 | 0001 0000 | 16 | 发送视频的权限 |
第 6 位 | 0010 0000 | 32 | 接收视频的权限 |
第 7 位 | 0100 0000 | 64 | 发送辅路(也就是屏幕分享)视频的权限 |
第 8 位 | 1000 0000 | 128 | 接收辅路(也就是屏幕分享)视频的权限 |
注意:当某一个 SDKAppid 开启高级权限控制后,使用该 SDKAppid 的所有用户都需要在 TRTCParams 中传入
privateMapKey
参数才能成功进房(如 步骤 2 所述),如果您线上有使用此 SDKAppid 的用户,请不要轻易开启此功能。
由于 PrivateMapKey 的价值就是为了防止客户端被逆向破解,从而出现“非会员也能进高等级房间”的破解版本,所以它只适合在您的服务器计算再返回给您的 App,决不能在您的 App 端直接计算。
我们提供了 Java、PHP 和 Node.js 三个版本的 PrivateMapKey 计算代码,您可以直接下载并集成到您的服务端。
语言版本 | 关键函数 | 下载链接 |
---|---|---|
Java | genPrivateMapKey 和 genPrivateMapKeyWithStringRoomID |
Github |
GO | GenPrivateMapKey 和 GenPrivateMapKeyWithStringRoomID |
Github |
PHP | genPrivateMapKey 和 genPrivateMapKeyWithStringRoomID |
Github |
Node.j | genPrivateMapKey 和 genPrivateMapKeyWithStringRoomID |
Github |
Python | genPrivateMapKey 和 genPrivateMapKeyWithStringRoomID |
Github |
C# | genPrivateMapKey 和 genPrivateMapKeyWithStringRoomID |
Github |
如上图所示,当您的服务器计算好 PrivateMapKey 之后,就可以下发给您的 App,您的 App 可以通过两种方案将 PrivateMapKey 传递给 SDK:
如果想要控制用户进入房间的权限,您可以在调用 TRTCCloud
的 enterRoom
接口时,通过设置 TRTCParams 中的 privateMapKey 参数即可实现。
这种进房时校验 PrivateMapKey 的方案比较简单,非常适合于在用户进入房间前就能将用户权限确认清楚的场景。
在直播场景中,往往都会有观众上麦变成主播的连麦场景。当观众变成主播时,TRTC 会再校验一次进房时在进房参数 TRTCParams
中携带的 PrivateMapKey,如果您将 PrivateMapKey 的有效期设置得比较短,例如“5分钟”,就会很容易触发校验失败进而导致用户被踢出房间。
要解决这个问题,除了可以延长有效期(例如将“5分钟”改成“6小时”),还可以在观众通过 switchRole
将自己的身份切换成主播之前,重新向您的服务器申请一个 privateMapKey,并调用 SDK 的实验性接口 updatePrivateMapKey
将其更新到 SDK 中,示例代码如下:
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("api", "updatePrivateMapKey");
JSONObject params = new JSONObject();
params.put("privateMapKey", "xxxxx"); // 填写新的 privateMapKey
jsonObject.put("params", params);
mTRTCCloud.callExperimentalAPI(jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
房间权限控制一旦开启后,当前 SDKAppid 下的房间就需要在 TRTCParams
中设置 privateMapKey 才能进入,所以如果您线上业务正在运营中,并且线上版本并没有加入 privateMapKey 的相关逻辑,请不要开启此开关。
UserSig 是 TRTCParams 的必选项,作用是检查当前用户是否有权使用 TRTC 云服务,用于防止攻击者盗用您的 SDKAppid 账号内的流量。
PrivateMapKey 是 TRTCParams 的非必选项,作用是检查当前用户是否有权进入指定 roomid 的房间,以及该用户在该房间所能具备的权限,当您的业务需要对用户进行身份区分的时候才有必要开启。
操作场景 本节为您介绍如何通过控制台提供的远程登录功能(即VNC方式)登录到弹...
01 高科技时代的零失业现象 半个多世纪以前,著名数学家约翰冯诺依曼曾提出,也...
一个 虚拟主机 可以放几个网站?虚拟主机产品也分为分为单站点和多站点,单站点...
当您发现云服务器的运行速度变慢或云服务器实例突然出现网络断开现象,则可能是...
近日,海外媒体 域名 杂志(DomainMagazine)发布了一篇资讯,介绍了.top溢价域...
5月26日 在 2021 云原生产业大会上 中国信通院联合 CNCF 发布 2021 年云原生优秀...
前言 在很多网站上,都会以表格的形式展示数据,而我们获取这种数据只需通过十几...
根据ICANN6月11日发布的《国际 域名 政策动态》显示,ICANN 于 5 月 22 日宣布宣...
在现代科技的推动下,大数据逐渐渗透到体育领域,大数据技术在足球这项世界第一...
云上应用管理神器 SAE 面向 Serverless PaaS,提供成本更优、效率更高的一站式应...