描述:
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-04-02 14:04