# 设备认证

# 1 设备密钥认证

连接地址:

地区

mqtt 地址

中国

mqtts://app.mqtt.fogcloud.io:8883

欧洲

mqtts://mqtt-eu.fogcloud.io:8883

设备认证方式目前支持密钥认证。密钥认证有两种认证方案:「一机一密」和「一型一密」,两种方案在易用性和安全性上各有优势。为系统安全性考虑,推荐使用“一机一密”,但由于密钥是服务端生成,所以使用“一机一密”的前提是物联网模组或者主控 MCU 芯片支持烧录每个芯片都不一样的 ID。

# 1.1 一机一密

一机一密需要预先为设备烧录三元组信息:product_key,device_name,device_secret。当设备与FogCloud平台建立 mqtt 连接时,FogCloud会对三元组组成的连接参数进行认证。认证通过后,设备可与FogCloud平台进行通信。

# 1.1.1 mqtt 连接参数

  • client_id 固定格式:${client_id}|signmethod=${signmethod},authType=${auth_type}|

参数说明:

参数

说明

${client_id}

mqtt 客户端 id,需要自定义。建议使用device_name<span>&</span>product_keymac地址

${signmethod}

签名算法,支持:hmacmd5hmacsha1aescmac;不填则默认hmacsha1

${auth_type}

认证方式:1-一机一密,2-一型一密预注册,3-一型一密免预注册。不传则默认为 1

  • username 固定格式:${device_name}<span>&</span>${product_key}

  • password 使用client_id参数中的${signmethod}为签名算法,以device_secret为密码,对拼接字符串计算签名,并将得到的字节码转为 hex 字符串即可得到password

进行签名的字符串为固定格式:clientId${client_id}deviceName${device_name}productKey{$product_key}

# 1.1.2 示例

一个设备的三元组为:

{
    "product_key": "7153abc4",
    "device_name": "00000000",
    "device_secret": "10dbb5bd4328feda67376318ac4ac714"
}

client_id 参数为:

{
    "authType": 1,
    "client_id": "00000000&7153abc4",
    "signmethod": "hmacsha1"
}

则其 MQTT 连接参数如下:

client_id=00000000&7153abc4|signmethod=hmacsha1,authType=1|
username=00000000&7153abc4
password=hmacsha1("10dbb5bd4328feda67376318ac4ac714", "clientId00000000&7153abc4deviceName00000000productKey7153abc4").toHexString()

加密后的 password 为 16 进制字符串:

ea2d65261c829ee0902d021dbcba8512479e6c02

# 1.2 一型一密

一型一密可以为同一产品下所有设备烧录相同的信息:product_keyproduct_secret。设备激活时需发送激活请求,FogCloud平台会进行身份认证,认证通过后,返回设备接入所需信息

# 1.2.1 基本步骤

  1. 创建产品

  2. 在产品详情里开启动态注册功能

  3. 添加设备

  4. 烧录product_key, product_secret到设备

  5. 动态注册

# 1.2.2 基于 http 的动态接入

设备直接向FogCloud平台发起 http 请求,动态获取三元组信息,然后再按一机一密方式进行接入。

api 接口: POST https://$ (opens new window){host}/api/v1/auth/register/device

请求参数(json 格式):

{
  "product_key": "12345678",
  "mac": "00000000",         //设备mac地址
  "sign_method": "hmacsha1", //hmac算法,可选:hmacmd5, hmacsha1
  "sign": "20a9af62f630ce54eae18a424905cae3da909371", //hmac签名
  "random": "123fadff" // 随机字符串,长度大于5字节
}

签名计算方式:使用 sign_method 字段的 hmac 算法,product_secret 作为秘钥,对固定格式字符串进行签名,并将得到的字节码转为 hex 字符串即可。 被签名的字符串固定格式为:mac${mac}productKey${product_key}random${random}

返回参数(json 格式):

{
  "code": 0,     //0-成功
  "message": "", //错误信息
  "data": {
    "product_key": "12345678",
    "device_name": "00000000",
    "device_secret": "xxxx"
  }
}
更新时间: 2022/12/30 上午10:43:42