登录
鉴权方式
本章节内容使用的鉴权方式为 签名鉴权
,请确认这是您想要的鉴权方式,详见选择鉴权方式。
服务端对接
对应流程第 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_key
为 test_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_id | string | 否 | 游戏的区服 ID,仅页游接入需要(区服 ID 后端来源) |
userId | string | 是 | 平台的用户 ID(由平台提供) |
xlData | string | 是 | 平台的用户数据(由平台提供),查看数据结构 |
client | string | 否 | 平台的运行环境(由平台提供),1 表示浏览器,2 表示迅雷游戏客户端,目前仅 PC 游戏中心存在此字段 |
sign | string | 是 | 通过 MD5 加密算法对上述参数算出来的签名,供游戏方校验参数是否被篡改 |