说明:
免注册登录方式,可不需要预先对设备进行创建,基于项目共享密钥生成设备密钥进行登录,并可选择是否自动创建设备。其安全性略低于设备独立密钥方式,但由于不需要预先注册,适合希望简化业务流程的客户。
开通免注册登录
通过云 API更改项目安全模式为项目共享密钥,设置32位项目密钥,并根据使用场景设置是否允许自动注册以及远端获取现场设备列表。
字段 | 说明 | 取值 |
Mode | 安全模式 | 0:设备独立密钥 1:项目共享密钥 |
Key | 项目共享密钥 | 32位字符串,小写英文 + 数字 |
AutoRegister | 自动注册方式 | 0:关闭自动注册 1:仅允许现场设备自动注册 2:仅允许远端设备自动注册 3:允许现场和远端设备均自动注册 |
FieldListEnable | 是否允许远端获取现场设备列表(getGwList) | 0:不允许 1:允许 |
注意:
项目共享密钥模式,仅能在已开启项目 License 共享情况下使用。若需要账户开启项目 License 共享计费,请联系产品人员进行商务沟通。
设备登录密钥生成
在项目共享密钥模式下,服务允许设备采用基于项目共享密钥生成的设备密码登录。可基于设备 ID 以及项目共享密钥生成设备密码,具体计算方法如下:
import hmacimport hashlibimport base64def genDevicePassword(devId,Key):hmac_digest = hmac.new(Key, devId+"00000000", hashlib.sha256).digest()base64_str = base64.b64encode(hmac_digest).decode('utf-8')signature = base64_str.replace('+','').replace('/','').lower()return signature[:16]
import ("crypto/hmac""crypto/sha256""encoding/base64""fmt""strings")func GenDevicePassword(devid, secKey string) string {h := hmac.New(sha256.New, []byte(secKey))h.Write([]byte(devid + "00000000"))digest := h.Sum(nil)encoded := base64.StdEncoding.EncodeToString(digest)encoded = strings.ReplaceAll(encoded, "+", "")encoded = strings.ReplaceAll(encoded, "/", "")encoded = strings.ToLower(encoded)if len(encoded) < 16 {return ""}return encoded[:16]}
注意:
正式上线使用时,建议项目共享密钥保存在服务器侧。由服务器生成设备登录密码下发给设备,避免密钥保存在客户端侧产生的密钥泄露风险。
项目共享密钥模式下,对于已注册的设备,目前只能使用注册时(包含自动注册)的登录密码进行后续登录。相当于已注册的设备会工作在设备独立密钥模式下,若需要更改密码可以使用设备密钥更改 API 对设备密码进行更新。
如果希望在变更项目共享密钥后,仍然可以基于新的项目共享密钥产生的设备密码对已登录过的设备进行正常登录,建议关闭自动注册。
典型使用场景
自动注册
场景需求
无需提前对设备进行注册,设备首次上线时,即可自动完成注册。
用法建议
项目设置项目共享密钥模式,并开启自动注册。首次登录时,基于项目共享密钥生成的登录密码,实现设备首次上线时自动注册。后续需要对设备密码进行更新时,仍然可使用设备密码更改 API 进行独立更新。
匿名观看
场景需求
远端设备无需注册,可匿名观看视频流。
用法建议
项目设置项目共享密钥模式,并关闭自动注册以及远端现场设备列表获取功能。对于远端设备,使用随机生成的远端设备 ID 和对应登录密码,可实现对指定现场设备的匿名播放。如果同时需要管控远端对现场设备视频的观看权限,可在黑名单模式下,将现场设备 ID 本身作为远端观看时的鉴权 URI 进行管理。
批量密码变更
场景需求
服务端希望能够一次更新所有设备密码,无需单个设备更新。
用法建议
项目设置项目共享密钥模式并关闭自动注册,定期更改项目共享密钥,实现批量密码更新接入。