操作场景

本文档介绍服务端 SDK 的相关接口与功能。

操作步骤

下载 SDK

下载地址:服务端 SDK。

版本说明

Golang 语言

v20190724 版本

  • 目录:Golang/v20190724
  • 更新说明:Iot Tid 设备认证支持 HTTP 和 HTTPS 两种协议的长连接模式;调整目录结构。
  • 使用说明:
    • 设备认证:参考 src/iottid/server_test.go。
    • SM4加解密:参考 src/iottid/sm4_test.go。

v20190501 版本

  • 目录:Golang/v20190501
  • 更新说明:初始版本,封装了 Iot Tid 的设备认证接口和 SM4 国密算法加解密接口。
  • 使用说明:
    • 设备认证:参考 src/iottid/server_test.go。
    • SM4 加解密:参考 src/iottid/sm4_test.go。

Python 语言

v20190724 版本

  • 目录:Python3/v20190724
  • 更新说明:Iot Tid 设备认证支持 HTTP 和 HTTPS 两种协议的长连接模式;调整目录结构。
  • 使用说明:
    • 设备认证:参考 iottid/server_test.py。
    • SM4 加解密:参考 iottid/sm4_test.py。

v20190501 版本

  • 目录:Python3/v20190501
  • 更新说明:初始版本,封装了 Iot Tid 的设备认证接口和 SM4 国密算法加解密接口。
  • 使用说明:
    • 设备认证:参考 iottid/server_test.py。
    • SM4 加解密:参考 iottid/sm4_test.py。

PHP 语言

v20190724 版本

  • 目录:Php/v20190724
  • 更新说明:Iot Tid 设备认证支持 HTTP 和 HTTPS 两种协议的长连接模式;调整目录结构。
  • 使用说明:
    • 设备认证:参考tests/ServerTest.php。

v20190701 版本

  • 目录:PHP/v20190701
  • 更新说明:初始版本,封装了 Iot Tid 的设备认证接口。
  • 使用说明:
    • 设备认证,参考 tests/ServerTest.php。

开发流程

生成通信密钥

用户服务端与 TID 认证服务器之间的通信涉及到加密及签名验证,用户需要使用 服务端 SDK 提供的工具生成 RSA 公私钥,并将生成的公钥文件(public_key.pem)的完整内容,通过 使用管理控制台 上传至 TID 认证服务平台,同时保留私钥用于 SDK 调用。

生成通信密钥的工具详情如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLCA8E4dWD9pgFBOCqW6
f2/TotqutryZJjgn8QsvXDMmZru05Wb3ts+qs/uM1BN2zAU27MZDsffsxXBn0VO0
awHYvLkeJcOTE0UrHc7tTWm7eQNG0hNrOYCnXmKXMRAGhhP2834OyqY2DM6UICAN
EF4bpSNhG7ctOCXhNqW1xDiRpJQ+5+1ob8L6801hMCEsQUADxu5nsohGIc5RGw0G
xh5mcb2mEdN66ha8bGkJ78ntwGZEuudKQZXDEW4+If+kl3lfJAiUfPipBYeexKVH
fhyrWhqBwB5ahxRFCA+ZasowIe71OGliRu9Rto2Yda/e538l0iRDllmkSDrzQSdB
xQIDAQAB
-----END PUBLIC KEY----------BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxLCA8E4dWD9pgFBOCqW6f2/TotqutryZJjgn8QsvXDMmZru0
5Wb3ts+qs/uM1BN2zAU27MZDsffsxXBn0VO0awHYvLkeJcOTE0UrHc7tTWm7eQNG
0hNrOYCnXmKXMRAGhhP2834OyqY2DM6UICANEF4bpSNhG7ctOCXhNqW1xDiRpJQ+
5+1ob8L6801hMCEsQUADxu5nsohGIc5RGw0Gxh5mcb2mEdN66ha8bGkJ78ntwGZE
uudKQZXDEW4+If+kl3lfJAiUfPipBYeexKVHfhyrWhqBwB5ahxRFCA+ZasowIe71
OGliRu9Rto2Yda/e538l0iRDllmkSDrzQSdBxQIDAQABAoIBAQCoio6SXH1sxznC
SA33tbevx8VUQYuA7u9U/r3LIUh9+x6m3aXPBYKy1hRykdVFTUB45ub/0YzkjYwI
S5/Kka2CHFz6qq4YshPvaU/fBRf3Q+jvc01WamlxJrtEd7sSwaa1cZolYBmQsQiT
xNjNBmnrYpjR0xU9SKOo/1yTFUBCWKvWUxnty38FsnOfU83Iiq3/eSMGODc5ttc3
YWoe2Cj+BX2gbgLRSdTGuQfGTwKlgGxvQ58SRrnUeR3o84pRJWixGcJc39sJlxeJ
oEa3GXkwjtqUCcxzW/TTMicrroJcj6fvs/yM8BlTwLvBvl6LMTj9jPJbzvB+ug/N
nnT/Rr7pAoGBAMe2jtFv0l4DmNlepAXzIrX5M+pmUG6IliNn7N3AHKRXKV5MSeTq
PrHpL//RgETgJUoEk6R6IhuChXrflxCzmcoorxFIshk8eq48FJ2ezrWAyJ5Vrkhu
MQPQKLjjxZ8LGGSSe7UOAvvcSuXI1AheMVtXMhoXwAY0ww2lrxwvd5vrAoGBAPwf
yZA4NyLQhO6LQ6+pTa2ogFl0n6BDU+BOiFw5UFDT0VurMWvy9pfuvalqo7sAqKbD
EhRn3+LeOxN6pwiA89XKMlLuoPEFPUCAmqvsdpMcXzkoiwmffms5C2RT9sQH4ycu
bQ8XzqTn9P3v9T4Hy6mKyQ63DtHo8qHxD9N4Ep0PAoGBAKrTC1w3krAZ0Y70dcYl
DuaqTu7LLzcsm4eTaDbREW68o0Tmajpk5tWUyRq/H0FKnHqwaX1BfpUbUoMkZvnB
NeWGYSCelsAhTCpmd5fO866qhm9wiE+p+UDytzJWmX4NpoK4DRpz7rdx2Zqs6jhy
ITOo5NEOyZBFZyXwN1UbgOqbAoGBAKjMC2HQETHw0x72BDIGMqhyaMP7baeZi/1f
9rFv+dKzjbZGzkbMmsYro7VaXRYlIcTMUz1wMhes23Z2JoBt/VIEFl8pvny/Gjwm
Hee+38AsPaCCAVxG+ReGUJcyE8M42J7x2ThCoyoK1h5xWgrWo0b2URfV/UkSIefE
Ael9uVCHAoGAXy8Lm+OkJPgAqAcZ2HLoOTvnNlTYVQ6wb1c5lnv4CNF8EW4eUG+7
5nTXTDcB70iIoICwHc2b9UuAu94UzJsQbWY6b1yu8EezFdJrJCvE++2sU/TL5oKA
RQJEYdm97KqXE0K5BYuxRKLpU03K0atfwhR2udtatz3NzyDfdyhqg1U=
-----END RSA PRIVATE KEY-----

认证流程对接

以 PHP 语言版本为例,对接流程如下:

$deviceDataByteArr = [
 1, 16, 2, 16, 0, 0, 93, 25, 226, 175, 103, 16, 7, 225, 0, 41,
 176, 162, 236, 143, 158, 171, 198, 251, 171, 100, 104, 155,
 239, 44, 244, 239, 236, 156, 0, 0, 180, 208, 100, 230, 165,
 145, 135, 188, 125, 8, 130, 26, 3, 226, 129, 132, 202, 10,
 179, 14, 170, 33, 10, 116, 250, 154, 17, 34, 231, 22, 207,
 121, 240, 43, 49, 15, 46, 205, 163, 149, 155, 201, 149, 70,
 219, 190, 57, 167, 163, 19, 40, 9, 14, 157, 93, 169, 170, 57,
 75, 161, 216, 77, 208, 64, 222, 8, 87, 58, 87, 210, 239, 129,
 67, 223, 26, 78, 253, 182, 191, 46, 125, 157, 45, 8, 190, 112,
 227, 19, 145, 147, 40, 19, 38, 239, 210, 110,
];
$deviceData = '';
foreach ($deviceDataByteArr as $byte) {
 $deviceData .= chr($byte);
}$userUin = '9666666666666';$userPrivateKey = "-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA1l31yT12UbcVYjPtvfgO8eyi32/ETT5fgnHnbY8OzhcYW5Lh
F7V+e/efMyiiNo+XtWj38JMXMJfvrXa9VnzwKlEZC5n3wki5+qCfxlRXgR5uIO/P
5p8M/qFUqfXx5rwcH2T8q0DAWG6GbYR2iIjFRproJd6x8Cb/VJllmhXMeI7jRp7r
jfuHcVhb5NlJWq+331aYITmKrdqLXE7j2XPvOBZouujjH1wE3HEWjBZOQRbNt8GC
Bgm649n06Yn6NXukUD8DNpC7eNIaCWPuzN5LRYQI1Qd7KSrJiMWgqKYmM/s/eJcV
pdKAy4l43Dsas8KYnjOm8TRxm2DZUQmcslinewIDAQABAoIBAQCoAuqRuCdU8l7D
IhoSiyoDeMlKwAml1N38mhOdrcMXycggdaUP9QLWXISdDxrcEn0ABO5W0qIZRuvm
E6tf7vo44Gj1y84AqwmAooW3ZwFSRKxiCjLy+POxWnbF4uqeQg70mCzkeBKI/M9F
ZM2WQ0QDC4QpsjnaFGaIQtX8B1vDnCH98hEZ/WQFhkVIaeljvZqx7pDgYsP2gF7S
8xdcYDJ1Vy9Gas2vLJ8scpOmWgse6hXVvy8CDmb0tf9we3xEAH8tuI7ZvhfcizTa
0En8WJZIP9osh3zmLgyrVZ0L87iiiNgaQoVkf6q1V5LTEUOYu9q95Q7owEGHzmBo
qRQGzaQxAoGBANrt0gCwd7/VlSMfOUBcf79uHjnYPX+Rbik+EjIHcXmmGuYcsJ3v
t03xuaLyinNPiOmKfQ+7n/cIL8m5Bx1JYkhnd6MAS9U62xAeW5OphiTCAN4stSP1
G8r6YXCgpuwzH+5xlkjyaQAIlYDQpBVzdMNMM0sPvOb6fyxD0iInku6TAoGBAPqq
YyITu4o7TpVnr9hcg3B2ehjxnOc8PTqGLC0hcNq05ZAYusd3ZALkRMVJciuwRgtK
pw9UEenCpottTPfJynKKT0AGMwdpdueZPZINi/XYrBj8z6E2Jag2adj0O1mSAay5
8DhDm20R6DsdrRskAgpH6PC7Y4tn10DlHlYVzQx5AoGBAJFsehulHNZbvIYo/nGn
P+Bb+E36OtebNe7FYXbEBPeGg8Wo9xTiIAPxdpsruxXflhVzvaEOw7JnSL8ZXgVx
Mozf1dN7pePNBajOUYxjhkyyZbsvPV/WOBD7gnA69sZdK2/LGcX46BByo0R+0w/A
sqXr3wKUQKm5aXJw1ouDeBFrAoGACSgUOvhxj1kfQ8Hn4IVwn7kUOLkKvD+tFOg1
0Og50SNuh1b/661mz9w6zuIh84qa5Gqzs5Gknd9oagtyFlMevBRlVLdlQc4Oc+Nb
JmysQizKDJeflgn+Uii6sRwq1tjIiuC377Y4hUF0NESfQDCOioWZ8sFFn6AJcutr
skVVmjECgYEA0VBIt9ku5dQoDB4MwDO3lLRlf/OmkOUBsOFa06wrSoPNxIaksdCs
DUOg4DCVID62kfa6bX+o1G0+/jiPwg2q5NLICy+6Q0L/ifzgnDadYgZTPwb2ZRwM
UihxUaSdcPVrcdqO0idrwwyb3lrt0/LAGmBpMsSKelpieQWpKwqZxL8=
-----END RSA PRIVATE KEY-----";use IotTid\Server;
$server = new Server();
$authResult = array();
try {
 $authResult = $server->authDeviceHttps($userUin, $userPrivateKey, $deviceData, $serverCertificatePath);
} catch (Exception $e) {
 echo "Auth device error: " . $e->getMessage() . "\n";
 throw $e;
}
$serverData = $authResult[0];
$sessionToken = $authResult[1];