跳到主要内容

登录

鉴权方式

本章节内容使用的鉴权方式为 签名鉴权 ,请确认这是您想要的鉴权方式,详见选择鉴权方式

服务端对接

对应流程第 7、8 步,游戏前端解析平台方提供的游戏启动链接后,将参数传递给游戏服务端,按照下述规则算出一个 32 位小写字符串,与游戏启动链接中的 sign 进行比对,如一致则通知游戏前端数据合法,可进入游戏。

签名规则

1. 签名规则

  • 游戏方获取的启动链接上,仅server_id、userId、xlData、client参与签名
  • 值为空字符串的字段不参与签名。
  • 将参与签名的参数按属性名升序排序,然后拼接为 k1=v1&k2=v2 格式(类似于浏览器的 URLSearchParams 但不需要对字符进行转义 )
  • 将游戏的签名密钥 sign_key 拼接到上面 k1=v1&k2=v2 字符串的末尾,得到 k1=v1&k2=v2sign_key
  • 对上面得到的字符串 k1=v1&k2=v2sign_key 进行 MD5 计算,得到 32 位小写字符串,即 MD5(k1=v1&k2=v2sign_key)

2. 签名计算示例

假设签名密钥 sign_keytest_key_e3654407c996bd0f8a45a14,校验流程如下:

// 假设游戏启动链接为:https://a.b.c/game001?server_id=12345678&sign=c37eb6c61e09a890b19f9eba45901d1b&userId=12345678&xlData=xxxxx&client=1
// 解析后的数据为:
const game_url_data = {
server_id: 12345678,
userId: 12345678
xlData: xxxxx,
client: 1,
sign: c37eb6c61e09a890b19f9eba45901d1b
};

将除了 sign 之外参与签名的参数按属性名升序排序,然后拼接为 k1=v1&k2=v2 格式:

const signString = "client=1&server_id=12345678&userId=12345678&xlData=xxxxx";

将签名密钥 sign_key 拼接字符串的末尾:

const signStringWithKey =
"client=1&server_id=12345678&userId=12345678&xlData=xxxxxtest_key_e3654407c996bd0f8a45a14";

MD5 计算字符串,得到签名(32 位小写字符串):

const localSign = MD5(signStringWithKey) = "c37eb6c61e09a890b19f9eba45901d1b"

与游戏启动链接携带的 sign 进行比较:

if (localSign === game_url_data.sign) {
// 通知游戏方前端登录有效
}

以下是游戏启动链接可能携带的参数:

参数类型必选说明
server_idstring游戏的区服 ID,仅页游接入需要(区服 ID 后端来源
userIdstring平台的用户 ID(由平台提供)
xlDatastring平台的用户数据(由平台提供),查看数据结构
clientstring平台的运行环境(由平台提供),1 表示浏览器,2 表示迅雷游戏客户端,目前仅 PC 游戏中心存在此字段
signstring通过 MD5 加密算法对上述参数算出来的签名,供游戏方校验参数是否被篡改