文档中心>游戏多媒体引擎

UserSig 相关

最近更新时间:2025-12-30 15:15:41

我的收藏
说明:
该文档适用于 GME 3.X 版本 SDK,如需下载该版本的 SDK,请参考 GME 3.X SDK 下载指引

什么是 UserSig?

UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权。目前,腾讯云的游戏多媒体引擎3.0(GME 3.0)、实时音视频(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 计算原理说明,如需了解具体的 UserSig 拼接代码实现方式,请参见 客户端计算 UserSig服务端计算 UserSig

客户端计算 UserSig

为了方便客户在开发调试阶段快速计算UserSig,GME SDk的各个平台实现都提供了相关的UserSig生成接口;在应用正式上线时建议使用安全性更高的服务端计算的方式来生成UserSig。
C++
java
Object-C
// 接口原型
// int GMESDK_CALL QAVSDK_AuthBuffer_GenAuthBuffer(unsigned int appId, const char* roomId, const char* userId, const char* key, unsigned char* authBuffer, unsigned int authBufferLen);

int userSigLen = 0;
unsigned char userSig[1024] = {0};
userSigLen = QAVSDK_AuthBuffer_GenAuthBuffer(1400******, "", "1000", "key*****", userSig, userSigLen);
import com.gme.av.sig.AuthBuffer;

// 接口原型
// public byte[] genAuthBuffer(int appId, String roomId, String userId, String appKey)

byte[] userSig;
userSig = AuthBuffer.getInstance().genAuthBuffer(1400******, "", "1000", "key*****");
#import "GMESDK/QAVAuthBuffer.h"

// 接口原型
// + (NSData*)GenAuthBuffer:(unsigned int)appId roomID:(NSString*)roomID openID:(NSString*)openID key:(NSString*)key;

NSData* userSig = [QAVAuthBuffer GenAuthBuffer:1400****** roomID:@"" openID:@"1000" key:@"key*****"];

服务端计算 UserSig

业务正式运行阶段,GME 提供安全等级更高的服务端计算 UserSig 的方案,可以最大限度地保障计算 UserSig 用的密钥不被泄露,因为攻破一台服务器的难度要高于逆向一款 App。具体的实现流程如下:
1. 您的 App 在调用 SDK 的初始化函数之前,首先要向您的服务器请求 UserSig。
2. 您的服务器根据 SDKAppID 和 UserID 计算 UserSig,计算源码见文档前半部分。
3. 服务器将计算好的 UserSig 返回给您的 App。
4. 您的 App 将获得的 UserSig 通过特定 API 传递给 SDK。
5. SDK 将 SDKAppID + UserID + UserSig 提交给GME服务器进行校验。
6. GME服务器校验 UserSig,确认合法性。
7. 校验通过后,会向 GME SDK 提供实时音频服务。



为了简化您的实现过程,我们提供了多个语言版本的 UserSig 计算源代码
语言版本
签名算法
签名接口
下载链接
Java
HMAC-SHA256
Github
GO
HMAC-SHA256
Github
PHP
HMAC-SHA256
Github
Node.js
HMAC-SHA256
Github
Python
HMAC-SHA256
Github
C#
HMAC-SHA256
Github
C++
HMAC-SHA256
Github