什么是 UserSig?
UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权。
目前,腾讯云的实时音视频(TRTC)、即时通信(IM)以及移动直播(MLVB)等服务都采用了该套安全保护机制。要使用这些服务,您需要在相应 SDK 的初始化或登录函数中提供 SDKAppID,UserID 和 UserSig 三个关键信息。
SDKAppID 用于标识您的应用
UserID 用于标识您的用户
UserSig 则是基于前两者计算出的安全签名。它由 HMAC SHA256 加密算法计算得出。只要攻击者不能伪造 UserSig,就无法盗用您的云服务流量。
UserSig 的计算原理如下图所示,其本质就是对 SDKAppID、UserID、ExpireTime 等关键信息进行了一次哈希加密:
//UserSig 计算公式,其中 secretkey 为计算 usersig 用的加密密钥
usersig = hmacsha256(secretkey, (userid + sdkappid + currtime + expire +
base64(userid + sdkappid + currtime + expire)))
说明:
currtime
为当前系统的时间,expire
为签名过期的时间。
调试跑通阶段如何计算 UserSig?
如果您当前希望快速跑通 Demo,了解 TRTC SDK 相关能力,您可以通过 客户端示例代码 和 控制台 两种方法计算获取UserSig,具体请参考以下介绍。 注意:
以上两种 UserSig 获取计算方案仅适用于调试,如果产品要正式上线,不推荐采用这种方案,因为客户端代码(尤其是 Web 端)中的 SECRETKEY 很容易被反编译逆向破解。一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。
正确的做法是将 UserSig 的计算代码放在您的业务服务器上,然后由您的 App 在需要的时候向您的服务器获取实时算出的 UserSig。
客户端示例代码计算 UserSig
1.2 单击应用配置查看 SDKAppID 对应的应用信息。
1.3 查看 基本信息 中的SDKSecretKey 即可获取用于计算 UserSig 的加密密钥。
1.4 单击复制密钥,可将密钥拷贝到剪贴板中。
2. 计算 UserSig:
为了方便客户端使用,我们提供各平台计算 UserSig 的源码文件,您可直接下载计算:
|
iOS | | TRTC-API-Example-OC/Debug/GenerateTestUserSig.h |
Mac | | OCDemo/TRTCDemo/TRTC/GenerateTestUserSig.h |
Android | | TRTC-API-Example/Debug/src/main/java/com/tencent/trtc/debug/GenerateTestUserSig.java |
Windows(C++) | | TRTC-API-Example-C++/TRTC-API-Example-Qt/src/Util/defs.h |
Windows(C#) | | TRTC-API-Example-CSharp/TRTC-API-Example-CSharp/GenerateTestUserSig.cs |
Web | | TRTC_Web/quick-demo-js/js/libs/generateTestUserSig.js |
Flutter | | TRTC-API-Example/lib/Debug/GenerateTestUserSig.dart |
我们在 TRTC SDK 的示例代码中提供了一个叫做 GenerateTestUserSig
的开源模块,您只需要将其中的 SDKAPPID、EXPIRETIME 和 SECRETKEY 三个成员变量修改成您自己的配置,就可以调用 genTestUserSig()
函数获取计算好的 UserSig,从而快速跑通 SDK 的相关功能:
控制台获取 UserSig
1. 进入实时音视频控制台,选择左侧栏的应用管理 > UserSig生成,查看签名(UserSig)生成工具模块。
2. 单击下拉框选择您已创建的应用(SDKAppID),完成后会自动生成对应的密钥(Key)。
3. 填写用户名(UserID)。
4. 单击生成签名UserSig,即可立即生成对应的签名 UserSig。
正式运行阶段如何计算 UserSig?
业务正式运行阶段,TRTC 提供安全等级更高的服务端计算 UserSig 的方案,可以最大限度地保障计算 UserSig 用的密钥不被泄露,因为攻破一台服务器的难度要高于逆向一款 App。具体的实现流程如下:
1. 您的 App 在调用 SDK 的初始化函数之前,首先要向您的服务器请求 UserSig。
2. 您的服务器根据 SDKAppID 和 UserID 计算 UserSig,计算源码见文档前半部分。
3. 服务器将计算好的 UserSig 返回给您的 App。
4. 您的 App 将获得的 UserSig 通过特定 API 传递给 SDK。
5. SDK 将 SDKAppID + UserID + UserSig
提交给腾讯云服务器进行校验。
6. 腾讯云校验 UserSig,确认合法性。
7. 校验通过后,会向 TRTCSDK 提供实时音视频服务。
为了简化您的实现过程,我们提供了多个语言版本的 UserSig 计算源代码(当前版本签名算法):
老版本签名算法 UserSig 计算源代码
为了简化签名计算难度,方便客户更快速地使用腾讯云服务,实时音视频自 2019-07-19 开始启用新的签名算法,从之前的 ECDSA-SHA256 升级为 HMAC-SHA256,也就是从 2019-07-19 之后创建的 SDKAppID 均会采用新的 HMAC-SHA256 算法。
如果您的 SDKAppID 是 2019-07-19 之前创建的,可以继续使用老版本的签名算法,算法的源码下载链接如下:
本页内容是否解决了您的问题?