Generate Aliyun API Signature with Node.js

To call Aliyun’s DNS API, you must generate the signature required by Aliyun. Signature Mechanism

I couldn’t find Node.js related code for getting signatures online. According to Aliyun’s requirements, I wrote a program myself to easily generate signatures.

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; // Return complete uri with signature
}


    function percentEncode(str) { // Percent encode 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) {  // Calculate HMAC
        // 47awTgVxfVEBL8hewkBgYD6kEvuJn0 
        return crypto
            .createHmac('sha1', "testsecret&") // Your secret
            .update(Signature)
            .digest()
            .toString('base64');
    }

    function uriSort(uri) { // Sort uri parameters
        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;
    }

Article Link:

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

# Latest Articles