tencent cloud

文档反馈

鉴权密钥

最后更新时间:2024-01-18 11:56:47
    为方便开发者调试和接入腾讯云游戏多媒体引擎产品,这里向您介绍适用于所有平台的鉴权密钥相关技术文档。

    语音密钥后台部署

    腾讯云游戏多媒体引擎提供鉴权密钥,用于实时语音及离线语音的鉴权,此文档为后台部署方案。
    鉴权所用到的签名产生过程涉及到明文密钥算法

    明文

    明文为以下字段的网络序拼接:
    字段描述
    类型/长度
    值定义/备注
    cVer
    unsigned char(1)
    版本号,填写数值:1
    wOpenIDLen
    unsigned short(2)
    用户的帐号长度
    strOpenID
    string
    用户的帐号字符
    dwSdkAppid
    unsigned short(4)
    开发者的 SDKappid
    dwReserved1
    unsigned int(4)
    填写数值:0
    dwExpTime
    unsigned int(4)
    过期时刻(当前时间+有效期[单位:秒,建议300秒])
    dwReserved2
    unsigned int(4)
    填写数值:-1或者 0xFFFFFFFF
    dwReserved3
    unsigned int(4)
    填写数值:0
    wRoomIDLen
    unsigned short(2)
    用户要进入的房间号码长度,如果是离线语音服务,请填写0
    strRoomID
    string
    用户要进入的房间号码字符

    密钥

    腾讯云 GME 控制台获取相关权限密钥。

    算法

    TEA 对称加密算法。 总体建议,建议接入初期使用客户端部署方案,后面可优化为部署在游戏 App 后台。
    方案
    优点
    缺点
    后台部署
    安全性高
    需要后台开发联调
    客户端部署
    接入快速
    安全性低

    后台部署使用方法

    后台生成加密串后,下发给客户端,客户端适用于如下场景,调用 API:EnterRoom 进行进房操作时,将加密串传给进房参数的 authBuffer 字段。

    算法加密详情

    密钥:APPID 对应的鉴权密钥
    加密算法:TEA 加密
    注意:
    控制台修改密钥后,15分钟 - 1小时内生效,不建议频繁更换。

    加密方法

    1. 把明文中的数字转换成网络字节序。
    2. 把明文按顺序(明文字段声明的顺序)拼接成一个字符串。
    3. 用 tea 加密拼接后的字符串,symmetry_encrypt 函数输出的字符串即为权限加密串。
    注意:
    不用要把二进制串转成16进制。

    示例代码

    以 C++ 语言为例,鉴权密钥示例代码如下:
    unsigned char pInBuf[512]={0};
    xel::byte_writer bw(pInBuf, sizeof(pInBuf));
    
    char cVer = 1;
    unsigned short wOpenIDLen = (unsigned short)strlen((const char *)strOpenID);
    if (wOpenIDLen > 127) wOpenIDLen = 127;
    unsigned short wRoomIDLen = (unsigned short)strlen((const char *)strRoomID);
    if (wRoomIDLen > 127) wRoomIDLen = 127;
    
    bw.write_byte(cVer);
    bw.write_int16(wOpenIDLen);
    bw.write_bytes(strOpenID, wOpenIDLen);
    bw.write_int32(dwSdkAppId);
    bw.write_int32(0 /*dwRoomID*/);
    bw.write_int32(expTime);
    bw.write_int32(nAuthBits);
    bw.write_int32(0 /*dwAccountType*/);
    bw.write_int16(wRoomIDLen);
    bw.write_bytes(strRoomID, wRoomIDLen);
    
    int pInLen = bw.bytes_write();
    
    unsigned char pEncryptOutBuf[512] = { 0 };
    int iEncrptyLen = 0;
    
    symmetry_encrypt((const unsigned char*)pInBuf, pInLen, (const unsigned char*)key, (unsigned char*)pEncryptOutBuf, &iEncrptyLen);
    我们也提供了 Java 和 Go 语言的示例代码,点击下载 >>
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持