通过HTTP发布消息
IoT Core 支持使用 HTTP 和 HTTPS 来进行消息单向发布(设备到云)。
获取 HTTP/HTTPS 接入点地址
在 IoT Core 详情页可以查看。也可通过 IoTCoreId
+ .iot.+Region
+.baidubce.com 拼接出来,其中 Region 即地域,在创建 IoT Core 当前支持广州gz
。
服务端口号
HTTP 可以使用 HTTP 或 HTTPS 两种方式连接和消息发布,对应端口如下:
协议 | 端口 | 描述 |
---|---|---|
HTTP | 80 | 非加密 HTTP 连接 |
HTTPS | 443 | 基于 TLS 加密的 HTTPS 连接 |
使用时可根据实际场景进行选择。
连接鉴权信息
在设备详情页,连接信息栏目,找到「DeviceSecret」字段,点击右侧小眼睛图标,查看连接信息,包含IoTCoreId、DeviceKey 和 DeviceSecret 或证书。
生成用户名及密码(设备密钥认证)
若创建设备时选的密钥认证,则需通过拼接获得连接用户名,并通过加密算法生成连接所需密码。
打开 连接信息生成器 ,使用拿到的 IoTCoreId、DeviceKey 和 DeviceSecret,生成 MQTT 连接所需的用户名及密码。
具体加密算法。
用户名拼接:
用户名拼接方式为 {adp_type}@{IoTCoreId}|{DeviceKey}|{timestamp}|{algorithm_type}
,其中:
字段 | 说明 |
---|---|
adp_type | 认证方式类型,当前仅支持取值“thingidp” |
IoTCoreId | 对应 IoT Core 的 ID |
device_key | 设备标识,一般为设备名称 |
timestamp | 生成签名时的时间戳,以秒为单位,长整数。可以不用传入。 |
algorithm_type | 字符串签名算法类型,取值 MD5 或 SHA256,不传入则默认为 MD5 |
密码生成:
1、组合加密字符串:{device_key}&{timestamp}&{algorithm_type}{device_secret}
,其中:
字段 | 说明 |
---|---|
device_key | 设备标识,一般为设备名称 |
timestamp | 生成签名时的时间戳,以秒为单位,长整数。如果无时钟服务,可以不用传入正确的时间戳,但必须传入0进行占位且在组合username时不传入对应timestamp值。 |
algorithm_type | 字符串签名算法类型,取值 MD5 或 SHA256 |
device_secret | 平台提供的密钥 |
2、进行加密
使用MD5或者SHA256,对加密字符串进行加密。具体过程如下:
获取加密字符串的UTF-8字符集比特数组,按选定的加密方式,对1中得到比特数组使用MD5或者SHA256进行加密,并将结果转换为小写形式。
示例
一个设备的连接信息为
IoTCoreId: abcd123
DeviceKey: mydevice
DeviceSecret: ImSeCrEt0I1M2jkl
时间戳: 1583826857
则当其选择 MD5 加密情况下
用户名 | 待加密字符串 | 密码 | 时间戳 |
---|---|---|---|
thingidp@abcd123|mydevice|1583826857|MD5 |
mydevice&1583826857&MD5ImSeCrEt0I1M2jkl |
7f0e63d2c6e122100edde19e34e7df5b |
使用 |
thingidp@abcd123|mydevice 或thingidp@abcd123|mydevice|0|MD5 |
mydevice&0&MD5ImSeCrEt0I1M2jkl |
22bc75231495220c7a2202fe15f7d286 |
不使用 |
使用方式
权限认证
通过向接入点({iotCoreid}.iot.gz.baidubce.com/auth
) POST 验证 username 和 password,换取消息发送所需的 token。
方法 | API | 说明 |
---|---|---|
POST | /auth | 获取鉴权 token |
请求参数
参数名称 | 是否必须 | 说明 |
---|---|---|
username | 必选 | 上文中组合得到的用户名 |
password | 必选 | 上文中计算得到的密码 |
Accept | 可选 | 当前只支持application/json |
tokenLifeSpanInSeconds | 可选 | token有效时长,默认600秒 |
请求示例
POST /auth HTTP/1.1
Host:axxxxxx.iot.gz.baidubce.com
Accept: application/json
Content-Type: application/json
Body: {"username":"thingidp@axxr***","password":"7a793***","tokenLifeSpanInSeconds":300}
认证成功返回示例
{"token":"eyJ0eXAiOiJKV***.eyJpc3MiOiJJT1RfQVVUSC0i***.t4I8jkCchRIPzGNeIgWYhDVFHuW***"}
认证失败返回示例
{
"code": "Unauthenticated",
"message": "Username and password is not matched"
}
消息发布
通过向接入点({iotCoreid}.iot.gz.baidubce.com/pub
) POST 方式来 Pub 消息。
方法 | API | 说明 |
---|---|---|
POST | /pub | 发送消息 |
请求头
参数名称 | 是否必须 | 说明 |
---|---|---|
token | 必选 | 上文中认证后返回的token值 |
Accept | 可选 | 当前只支持application/json |
请求参数
参数名称 | 是否必须 | 说明 |
---|---|---|
topic | 必选 | 消息需要发送到的主题 |
qos | 必选 | 消息qos,支持0或者1 |
请求示例
POST /pub?topic=mytopic&qos=0 HTTP/1.1
Host:${IotCoreid}.iot.gz.baidubce.com
Accept: application/json
Content-Type: application/octet-stream
token: "eyJ0eXAiOiJKV***.eyJpc3MiOiJJT1RfQVVUSC0i***.t4I8jkCchRIPzGNeIgWYhDVFHuW***"
认证成功返回示例
{"message": "ok"}
认证失败返回示例
{
"code": "Unauthenticated",
"message": "No permit to operate the topic"
}