描述:

iot平台开放接口的所有 RESTful 接口都使用appId及appSecret对称加密的方法来验证某个请求的发送者身份。appId用于标示用户;appSecret是用户用于加密签名字符串和服务器用来验证签名字符串的密钥,且appSecret必须妥善保管。

当用户想以个人身份向服务器发送请求时,首先需要将发送的请求按照指定的格式生成待签名的字符串;然后使用appSecret对待签名的字符串进行加密产生签名字符串。服务器收到请求以后,会通过appId找到对应的appSecret,以同样的方法计算签名字符串,然后与请求的签名字符串比较,如果计算出来的签名字符串和请求的一样即认为该请求是有效的;否则,服务器将拒绝处理这次请求,并返回错误。

URL签名示例

以【远程访问设备网页】接口为例:

GET https://deviceopenapi.ymlot.cn/open/openDevice?sn=12345678-abcd1234&expires=1739583239&appId=ym3b7f242fc0814489&signature=LgbUtpl5rdDlyi2xC23sBh3jc7eGgKXsn3Pxtr8BlDs%3d

其中,必须至少包含sn、expires、appId、signature这四个参数,除此之外根据不同的接口做相应的变化。

expires: 这个参数的值是一个UNIX时间(自UTC时间1970年1月1号开始的秒数),用于标识该URL的超时时间。如果服务器接收到这个URL请求的时候晚于签名中包含的expires参数时,则返回请求超时的错误。为了安全起见,请尽可能设置一个较短的过期时间,比如10分钟。注意:请确保您的计算机已同步正确的北京时间。

sn: 设备编号。

signature: 表示签名字符串。

signature计算方式

组合参数: 将以下参数按照顺序连接成一个字符串:
sn: 设备编号 (String)
expires: 过期时间 (String)
appSecret: 应用密钥 (String)
reversedAppSecret: 反转后的应用密钥 (String) — 将 appSecret 字符串反转得到。
计算 SHA-256 哈希值: 使用 SHA-256 算法计算组合字符串的哈希值。
Base64 编码: 将生成的 SHA-256 哈希值(字节数组)进行 Base64 编码,得到最终的签名字符串。

其中有几点规则需要注意:

1、签名的字符串必须为UTF-8格式。含有中文字符的签名字符串必须先进行UTF-8编码,再与 appSecret计算最终签名。
2、服务器先验证请求时间是否晚于expires时间,然后再验证签名。
3、将签名字符串放到URL时,注意要对URL进行urlencode。

举例

sn:12345678-abcd1234
expires:1739583239
appId:ym3b7f242fc0814489
appSecret:4d76f4ca87e2403e894ffc745283d769

第一步:将appSecret反转得到:967d382547cff498e3042e78ac4f67d4
第二步:将sn、expires、appSecret、appSecret的反转字符串参数按照顺序连接成一个字符串得到:12345678-abcd123417395832394d76f4ca87e2403e894ffc745283d769967d382547cff498e3042e78ac4f67d4
第三步:计算 SHA-256 哈希值,计算12345678-abcd123417395832394d76f4ca87e2403e894ffc745283d769967d382547cff498e3042e78ac4f67d4的哈希值
第四步:Base64 编码,将生成的 SHA-256 哈希值(字节数组)进行 Base64 编码得到:
LgbUtpl5rdDlyi2xC23sBh3jc7eGgKXsn3Pxtr8BlDs=
第五步:将Base64编码后的SHA-256 哈希值进行URL编码得到:LgbUtpl5rdDlyi2xC23sBh3jc7eGgKXsn3Pxtr8BlDs%3d

最终以设备远程为例发送的请求为:

GET https://deviceopenapi.ymlot.cn/open/openDevice?sn=12345678-abcd1234&expires=1739583239&appId=ym3b7f242fc0814489&signature=LgbUtpl5rdDlyi2xC23sBh3jc7eGgKXsn3Pxtr8BlDs%3d

至此,一个完整的步骤就完成了!

作者:mry  创建时间:2025-03-03 17:26
最后编辑:mry  更新时间:2025-04-02 14:04