将用户secretId以及用户SecretKey转换为签名(Sign),并进行签名认证。
控制台右上角账号-安全设置-API访问秘钥,客户可看到调用权限的账号信息,包括用户secretId以及用户SecretKey。
以HTTP/HTTPS协议作为客户端和后台服务接口的对接协议。
客户端可以通过GET或POST方式提交请求,后台以JSON格式返回数据结果。
将请求方法(注意大写)+请求地址+"?"+所有参数按照参数名的字母顺序升序排序后拼接(参数间用&拼接),参见如下:
url=POSThttps://iot-cloudapi.clife.cn/v5x/open/api/device/list? deviceIdentifier=test12345&nonce=23&productId=11477&secretId=e61be431da964cfc9f3d06aacc5d42a3×tamp=1607034723785
使用HMAC-SHA1算法对第一步中获得的签名原文字符串进行签名,然后将生成的签名串使用Base64进行编码后签名字符串生成完成。
如下伪代码所示:sign=Base64.encode(HMAC-SHA1(secertKey,url))
最终访问链接为:
https://iot-cloudapi.clife.cn/v5x/open/api/device/list? deviceIdentifier=test12345&nonce=23&productId=11477&secretId=e61be431da964cfc9f3d06aacc5d42a3 &sign=${sign}×tamp=1607034723785
String content = "POSThttps://iot-cloudapi.clife.cn/v5x/open/api/device/data/history/get? dataTimestamp=1660760824383&devId=320164698341244928&nonce=1&secretId=72fce3a8c9b6404d8598ec8f83e8d9d7×tamp=1660800784343";
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm());
mac.init(secret);
byte[] hash = mac.doFinal(content.getBytes(StandardCharsets.UTF_8));
System.out.println("sign:" + new String(Base64.getEncoder().encode(hash)));
sign : NhlEmlQzTe555dzm7FjSQKgpwvs=
参数名称 | 是否必须 | 字段类型 | 参数说明 |
---|---|---|---|
secretId | 是 | string | 接口访问用户secretId(secretId与secertKey由平台生成) |
sign | 是 | string | 签名 |
timestamp | 是 | number | 当前时间戳 |
nonce | 是 | number | 随机正整数 |
参数名称 | 基础信息 | 字段类型 | 参数说明 |
---|---|---|---|
pageIndex | 是 | number | 请求的页(从1开始),不设则默认为1 |
pageRows | 是 | number | 请求的每页行数,不设则默认为defaultPageRows,最大限制20行 |
totalRows | 否 | number | 总行数 |
totalPages | 否 | number | 总页数 |
defaultPageRows | 是 | number | 默认每页行数:20 |
currPageRows | 否 | number | 当前页的实际行数 |
pageStartRow | 是 | number | 当前页的起始行(从0开始,有可能超出总行数) |
pageEndRow | 是 | number | 当前页的结束行(从0开始,有可能超出总行数) |
hasPrevPage | 否 | boolean | 是否有前一页 |
hasNextPage | 否 | boolean | 是否有后一页 |