利用Nodejs生成阿里云API签名

想要调用阿里云的云解析API,必须要生成阿里云所要求的签名. 签名机制

网上一直没有找到nodejs相关获取签名的代码. 按照阿里云的要求,我自己写了一段程序,便于大家轻松的生成签名.

const querystring = require('querystring');
const crypto = require("crypto");

module.exports=function getSignatureParams(params) {
    StringToSign = "GET" + "&" + percentEncode("/") + "&" + percentEncode(uriSort(params))
    var Signture = getSignture(StringToSign);
    params.Signature = Signture;
    return params; //返回带签名的完整uri
}


    function percentEncode(str) { //百分比编码 uri
        var s = encodeURI(str);
        return s
            .replace(/ /g, "%20")
            .replace(/\//g, "%2F")
            .replace(/\+/g, "%20")
            .replace(/\*/g, "%2A")
            .replace(/\%7E/g, "~")
            .replace(/\=/g, "%3D")
            .replace(/\&/g, "%26")
            .replace(/\:/g, "%253A")
    }
 
    function getSignture(Signature) {  //计算HMAC
        // 47awTgVxfVEBL8hewkBgYD6kEvuJn0 
        return crypto
            .createHmac('sha1', "testsecret&") //你的secret
            .update(Signature)
            .digest()
            .toString('base64');
    }

    function uriSort(uri) { //uri参数排序
        var arr = querystring.stringify(uri).split("&");
        arr = arr.sort();
        var str = "";
        [].forEach.call(arr, function (s, i) {
            if (i == (arr.length - 1)) {
                str = str + s
            } else {
                str = str + s + "&"
            }
        });
        return str;
    }

本文链接:

https://alili.tech/archive/7cafffa9/