应用权限
概述
一般情况下,设备与 IoT Core 进行连接之后,需要在服务端开发对应业务系统以查看、管理、控制设备相关数据。应用权限即是用于满足此场景下鉴权需求的功能。
此处的应用泛指非设备侧业务逻辑,可运行在服务器、手机或者其他位置。
使用应用权限对应的 AppKey 及 AppSecret 计算后的签名,同样可用于 MQTT 方式收发消息或 HTTP/S 方式发布消息。
前提条件
在 新增应用之前,您需要创建一个 高级模式 主题的“模板”,创建详情请参见创建自定义模板。
操作步骤
- 登录物联网核心套件控制台。
- 进入“实例列表”,点击 实例名称 ,进入实例详情页面。
- 在实例详情页面的左侧导航栏,在“设备管理”下选择 应用权限,进入应用权限列表页面。
-
点击 新增应用 ,进入新增应用页面填写配置信息:
参数 说明 名称 AppKey 绑定 IAM Access Key,Appkey 与 IAM 账号 AK 保持一致,对应的 AppSecret 与 AS 一致。 使用方式 选择“主题透传”或“设备影子”两种使用方式(当前仅开放“主题透传”方式的应用权限,后续会逐步开放影子模式)。 模板 选择已创建的高级模式主题的模板 描述 (选填)填写该应用的相关信息,便于后续应用管理。
- 填写配置信息后,点击 提交即可完成创建。
-
在应用权限列表页面点击创建后的应用名称,可查看应用对应的连接信息如下:
鉴权字符串生成算法
使用应用权限连接 MQTT,需要根据要求组合username及计算password,具体计算过程如下。
用户名 username
bceiam@{iotCoreId }|{AppKey}|{timestamp}|SHA256
其中:
- iotCoreId:连接对应项目
- AppKey:即 AccessKey 上文描述IAM AK/SK标识唯一AK字段
- timestamp:签名生成 unix 时间戳,单位为毫秒(ms)
密码 password
password 计算符合 IAM 签名算法计算要求,首先计算 signKey ,并根据 signKey 和固定值的 canonicalRequest 计算最终 signature(最终signature 即为 password,用于连接 MQTT)。
且其中,计算中 canonicalRequest 值为固定字符串 POST\n/connect\n\nhost:iot.gz.baidubce.com
。
signKey计算:
SHA256HEX({secretKey}, "bce-auth-v1/{accessKey}/{normalTimestamp}/60")
其中:
•SHA256HEX:表示使用HMAC SHA256哈希算法进行计算。
•{secretKey}:IAM中AK/SK中的SK
•{normalTimestamp}:上文计算username时的{timestamp}值按照“yyyy-MM-ddTHH:mm:ssZ”模式(转为 UTC 时间)进行处理后的字符串。
signature 计算: SHA256HEX({signKey},{canonicalRequest})
其中:
•SHA256HEX:表示计算使用HMAC SHA256哈希算法对signKey和canonicalRequest进行计算。
•{signKey}:计算signKey得到的值
•{canonicalRequest}:取固定值 `POST\n/connect\n\nhost:iot.gz.baidubce.com`
计算得到的 signature 即为连接所需 password。
示例
例如,当前 IoT Core 的 ID 为aop098js
;AppKey 为 7761E24FC8b9bee8703a5efb266d9c0
,对应的 AppSecret 为 ABCxxxx1234567
,当前时间戳为1600834787219
则拼接的用户名为:bceiam@aop098js|7761E24FC8b9bee8703a5efb266d9c0|1600834787219|SHA256
计算的密码为:1b937b1268d8943860038f2a4bec637e5370ded2e848289bee1594e30c600d39
此外,可以通过 IAM 签名工具进行计算试用或者验证。具体字段填写方法如下:
注意其中时间戳对应的为 UTC 时间。
计算得到的中间结果3 signature即为连接所需 password。