调用物联网平台云端api时的签名js实现

简介: 调用物联网平台云端api时的签名js实现。

物联网平台中调用云端api,js的签名实现如下,目前物联网平台支持的api列表

const crypto = require('crypto');
const urlencode = require('urlencode');
const moment = require("moment");
function timestamp() {
    var date = new Date();
    var time = moment(date).utcOffset(0).format("YYYY-MM-DDTHH.mm.ss");
    time += 'Z';
    console.log("date===" + date);
    console.log("time===" + time);
    // 删除掉毫秒部分
    return time;
}
function encode(str) {
    var result = urlencode(str, "utf8");
    return result.replace(/!/g, '%21')
        .replace(/'/g, '%27')
        .replace(/\(/g, '%28')
        .replace(/\)/g, '%29')
        .replace(/\*/g, '%2A');
}
function replaceRepeatList(target, key, repeat) {
    for (var i = 0; i < repeat.length; i++) {
        var item = repeat[i];
        if (item && typeof item === 'object') {
            const keys = Object.keys(item);
            for (var j = 0; j < keys.length; j++) {
                target[`${key}.${i + 1}.${keys[j]}`] = item[keys[j]];
            }
        } else {
            target[`${key}.${i + 1}`] = item;
        }
    }
}
function flatParams(params) {
    var target = {};
    var keys = Object.keys(params);
    for (let i = 0; i < keys.length; i++) {
        var key = keys[i];
        var value = params[key];
        if (Array.isArray(value)) {
            replaceRepeatList(target, key, value);
        } else {
            target[key] = value;
        }
    }
    return target;
}
function normalize(params) {
    var list = [];
    var flated = flatParams(params);
    var keys = Object.keys(flated).sort();
    for (let i = 0; i < keys.length; i++) {
        var key = keys[i];
        var value = flated[key];
        list.push([encode(key), encode(value)]);
    }
    return list;
}
function canonicalize(normalized) {
    var fields = [];
    for (var i = 0; i < normalized.length; i++) {
        var [key, value] = normalized[i];
        fields.push(key + '=' + value);
    }
    return fields.join('&');
}
var AccessKeyId = "";
var accessSecret = "";
/*
var str = "POST&%2F&AccessKeyId%3D" + AccessKeyId
    + "%26Action%3DQueryDevice%26Format%3DJSON%26ProductKey%3Da1tDKl1PBkl%26RegionId%3Dcn-shanghai%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D86439216304009%26SignatureVersion%3D1.0%26Timestamp%3D2021-12-28T06%253A37%253A48Z%26Version%3D2018-01-20";;
*/
var str = "";
var httpmethod = "POST";
var params = {};
params.Format = "JSON";
params.Version = "2018-01-20";
params.AccessKeyId = AccessKeyId;
params.SignatureMethod = "HMAC-SHA1";
//params.Timestamp = timestamp();
params.Timestamp = '2021-12-28T06:37:48Z';
params.SignatureVersion = "1.0";
params.SignatureNonce = "86439216304009";
params.Action = "QueryDevice";
params.ProductKey = "a1tDKl1PBkl";
params.RegionId = "cn-shanghai";
var normalized = normalize(params);
console.log("normalized===" + normalized);
var canonicalized = canonicalize(normalized);
console.log("canonicalized===" + canonicalized);
str = httpmethod + "&" + encode("/") + "&" + encode(canonicalized);
console.log("str===" + str);
var key = accessSecret + "&";
const signature = Buffer.from(crypto.createHmac('sha1', key).update(str).digest()).toString('base64');
console.log("signature==="+signature);
console.log("最终signature===" + encode(signature));
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
6月前
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
317 2
|
8月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的云端学习系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的云端学习系统附带文章和源代码部署视频讲解等
51 4
|
6月前
|
运维 Cloud Native JavaScript
云端新纪元:云原生技术深度解析深入理解Node.js事件循环及其在异步编程中的应用
【8月更文挑战第27天】随着云计算技术的飞速发展,云原生已成为推动现代软件开发和运维的关键力量。本文将深入探讨云原生的基本概念、核心价值及其在实际业务中的应用,帮助读者理解云原生如何重塑IT架构,提升企业的创新能力和市场竞争力。通过具体案例分析,我们将揭示云原生技术背后的哲学思想,以及它如何影响企业决策和操作模式。
|
7月前
|
安全 物联网 区块链
云端防御:云计算时代的网络安全策略与实战《未来已来:探索区块链、物联网与虚拟现实的融合革新》
【7月更文挑战第31天】在数字化转型的浪潮中,云计算已成为推动企业增长的核心动力。然而,随着数据和应用逐渐迁移到云端,网络安全问题也愈发严峻。本文将探讨云计算环境中的安全挑战,并提出相应的防御策略。通过分析云服务模型、安全威胁及信息安全技术的应用,结合代码示例,本文旨在为读者提供一套实用的云端安全防护方案。
61 1
|
7月前
|
机器学习/深度学习 传感器 边缘计算
云端物联:智能物联网平台引领数字化转型之路
云上智能物联网平台正在成为推动数字化转型的重要力量。它不仅为企业带来了新的商业模式和发展机会,也为消费者提供了更加便捷和个性化的服务体验。
|
7月前
|
前端开发 JavaScript
前端 JS 经典:函数签名
前端 JS 经典:函数签名
69 0
|
7月前
|
移动开发 JavaScript
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
121 0
|
9月前
|
开发框架 前端开发 JavaScript
C# 结合JavaScript实现手写板签名并上传到服务器
C# 结合JavaScript实现手写板签名并上传到服务器
|
JavaScript 前端开发
JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存
JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存
240 0
|
9月前
|
JavaScript 前端开发 区块链
JavaScript【代码】使用JS实现简单的区块链(签名+工作量证明机制)
JavaScript【代码】使用JS实现简单的区块链(签名+工作量证明机制)
89 0

相关产品

  • 物联网平台