# 服务器鉴权
# 一、接入说明
# 1.1 游戏服务器鉴权
接口名 /auth
请求参数
参数 | 类型 | 描述 |
---|---|---|
type | int | 微信:1/QQ:2/有乐:4 |
js_code | string | 自定义登陆态 |
appid | string | 游戏id |
openid | string | 用户唯一标识 |
返回参数
参数 | 类型 | 描述 |
---|---|---|
ret | int | 返回码 0:正确,其他:失败 |
msg | string | 返回结果详细说明 |
请求示例
请求
{
"type": 1,
"js_code":"code",
"appid":"id",
"openid":"openid"
}
1
2
3
4
5
6
2
3
4
5
6
返回
{
"ret": 0,
"errmsg": "d"
}
1
2
3
4
2
3
4
# 1.2 游戏自有tconnd服务器鉴权
1.2.1 创建头文件并将如下代码拷贝到该文件中,加入项目中
#ifndef PUB_DEFINE_H_
#define PUB_DEFINE_H_
#include <string.h>
#include <stdint.h>
#define OPEN_ID_LEN 128
#define SESSION_KEY_LEN 128
#define MAX_EXAUTHDATA_LEN 1024
enum AuthDataType {
TYPE_NULL = 0,
TYPE_WX = 1,
TYPE_QQ = 2,
TYPE_NOAUTH = 3,
TYPE_YL = 4,
};
struct WXExAuthData {
char openid[OPEN_ID_LEN];
char sessionkey[SESSION_KEY_LEN];
WXExAuthData() {
memset(openid, 0, OPEN_ID_LEN);
memset(sessionkey, 0, SESSION_KEY_LEN);
};
};
struct QQExAuthData {
char openid[OPEN_ID_LEN];
char sessionkey[SESSION_KEY_LEN];
QQExAuthData() {
memset(openid, 0, OPEN_ID_LEN);
memset(sessionkey, 0, SESSION_KEY_LEN);
};
};
struct PCExAuthData {
char openid[OPEN_ID_LEN];
PCExAuthData(){};
};
struct YLExAuthData {
char openid[OPEN_ID_LEN];
YLExAuthData(){};
};
union AuthData {
WXExAuthData wx_data;
PCExAuthData pc_data;
QQExAuthData qq_data;
YLExAuthData yl_data;
AuthData(){};
};
struct ExAuthData {
int type; //AuthDataType 枚举类型
uint64_t appid; //在MOGS平台获得的appid(不接入可以不关心)
char sigatk[OPEN_ID_LEN]; //自定义登录态客户端存储并在下次登录时与openid一起传入进行鉴权
uint32_t limit_time; //有效时长,一个未来时间戳
uint64_t guid; // 接入自有账号体系后返回的唯一id
AuthData data;
ExAuthData() {
type = TYPE_NULL;
appid = 0;
memset(sigatk, 0, OPEN_ID_LEN);
limit_time = 0;
guid = 0;
};
};
namespace ExternAuthSpace {
bool DecodeExData(ExAuthData& data, const unsigned char* buff,
uint32_t buff_len) {
if (buff_len > MAX_EXAUTHDATA_LEN || buff_len == 0) {
return false;
}
memcpy(&data, buff, buff_len);
return true;
}
} // namespace ExternAuthSpace
#endif // PUB_DEFINE_H_
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
1.2.2. 在监听TFRAMEHEAD_CMD_START命令的函数中实现类似如下的解析
TFRAMEAUTHAPS &auth_info =
frame_head.stCmdData.stStart.stAuthData.stAuthService;
ExAuthData data;
if (auth_info.wAuthExDataLen > 0) {
bool ret = ExternAuthSpace::DecodeExData(data, auth_info.szAuthExData,
auth_info.wAuthExDataLen);
if (!ret) {
return -1;
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
1.2.3. 通过解析可以获得ExAuthData的数据并在自己的处理函数中使用数据。(注意:在解析数据之前尽量不要做其他操作,调用tconnd提供的api,如:tconnapi_send(),会造成TFRAMEHEAD被重置而拿不到数据)
1.2.4. 接入配置文件配置引导。
tconnd的配置文件中找到
<AuthInfo>
***********
</AuthInfo>
1
2
3
2
3
各项配置,ServiceMode填0,BusinessID填0,ApsSvrCount填1,ApsSvrUrls填 可用服务器列表 (opens new window) 对应的服务器地址
<ApsAuthInfo>
<!--0表示接入 -->
<ServiceMode>0</ServiceMode>
<!--接入业务ID-->
<BusinessID>${BusinessID} </BusinessID>
<ApsSvrCount>1</ApsSvrCount>
<!--接入地址-->
<ApsSvrUrls>9.140.146.47:9611</ApsSvrUrls>
</ApsAuthInfo>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
1.2.5. 鉴权连接参数解析
通过下面的SKD的api(getAccount)获得openid和token。
参数account_value填入openid
account_value填入openid
account_type填入36865(微信),36866(手Q),36867(有乐),36864(无鉴权)
appid填入mogs提供的appid
client_type填入tconnd定义的tagTCONNAPI_CLIENT_TYPE枚举值
1
2
3
4
2
3
4
tagTCONNAPI_CLIENT_TYPE枚举
enum tagTCONNAPI_CLIENT_TYPE
{
TCONNAPI_CLIENT_TYPE_PC = 0, /* PC客户端 */
TCONNAPI_CLIENT_TYPE_MOBILE = 1, /* 移动终端 */
TCONNAPI_CLIENT_TYPE_UNKNOWN = 100, /* 未知 */
TCONNAPI_CLIENT_TYPE_ANDROID = 101, /* 移动终端android */
TCONNAPI_CLIENT_TYPE_IOS = 102, /* 移动终端ios */
TCONNAPI_CLIENT_TYPE_MAC = 103,
TCONNAPI_CLIENT_TYPE_WINDOWS = 104,
TCONNAPI_CLIENT_TYPE_SWITCH = 110,
TCONNAPI_CLIENT_TYPE_PS = 120,
TCONNAPI_CLIENT_TYPE_XBOX = 130,
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
连接示例
[wss://{自有tconnd地址}?account_value=&account_type=36866&token=d69cafaf9f5a5465712ed18bef2481d0&appid=10000&client_type=102](.)
1