node.js版阿里云签名封装

2018-06-14  本文已影响0人  同小类

文章摘自  利用Nodejs生成阿里云API签名 | 一个前端开发的踩坑小报告 自己又详细一下它

一.随机数和时间数的生成 使用moment插件

二.签名的生成  

传入参数  形式如下:

var ret = {

        Action: 'GetPlayInfo',

        VideoId: '',

        Format: 'JSON',

        Version: '2017-03-21',

        AccessKeyId: '',

        SignatureMethod: 'HMAC-SHA1',

        Timestamp: timestamp,

        SignatureVersion: '1.0',

        SignatureNonce: signaturenonce,

    }

(可能会遇到的问题  本人遇到了  当报签名不匹配的时候  原因可能是签名base64的时候解析出来带加号的签名  这个时候需要将返回的签名的加号替换为%2B)(url会将加号替换为空格导致)

params.Signature = Signture.replace(/\+/g,'%2B');

下面代码直接的放一个地方require即可:

constquerystring =require('querystring');

constcrypto =require("crypto");

module.exports=functiongetSignatureParams(params){

StringToSign ="GET"+"&"+ percentEncode("/") +"&"+ percentEncode(uriSort(params))

var Signture = getSignture(StringToSign);

    params.Signature = Signture;

return params;//返回带签名的完整uri

}

functionpercentEncode(str){//百分比编码 uri

var s =encodeURI(str);

returns

.replace(/ /g,"%20")

.replace(/\//g,"%2F")

.replace(/\+/g,"%20")

.replace(/\*/g,"%2A")

.replace(/\%7E/g,"~")

.replace(/\=/g,"%3D")

.replace(/\&/g,"%26")

.replace(/\:/g,"%253A")

    }

functiongetSignture(Signature){//计算HMAC

returncrypto

.createHmac('sha1',"testsecret&")//你的secret

            .update(Signature)

            .digest()

.toString('base64');

    }

functionuriSort(uri){//uri参数排序

vararr = 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;

    }

上一篇下一篇

猜你喜欢

热点阅读