服务端接入开发

最近更新时间:2019-07-29 15:03:27

操作场景

本文档介绍服务端 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 调用。

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

  • 目录:DevTools
  • 使用方式:
    • 安装依赖库(requirements.txt)。
    • 执行 "python generate_rsa_key_pair.py KEY_PAIR_DIR",KEY_PAIR_DIR 表示密钥存放的目录,该目录下会生成public_key.pem 公钥文件和 private_key.pem 私钥文件。
  • 公钥文件内容示例:
    -----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 语言版本为例,对接流程如下:

  1. 将 SDK 提供的库 src/IotTid 及其依赖 composer.json 整合到业务项目工程中。
  2. 获取完整的设备端认证数据流,并转换为字符串形式存储至 $deviceData 变量。
    $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);
    }
  3. 账号信息页面 获取您的腾讯云主账号 ID,将其作为字符串存储至 $userUin 变量。
    $userUin = '9666666666666';
  4. 将之前生成的私钥文件的内容作为字符串存储至 $userPrivateKey 变量。
    $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-----";
  5. 调用设备认证 HTTPS 接口,若调用成功,将服务端认证字节流存储至 $serverData 变量,将会话 Token 存储至 $sessionToken 变量,将服务端证书文件路径存储至 $serverCertificatePath 变量。
    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];
  6. $serverData 变量的内容作为服务端认证数据流完整传输给设备。
  7. $sessionToken 作为该设备最新的会话 Token,按照预设的对称加密算法,使用该 Token 作为密钥进行业务数据加解密操作。