美文网首页
node.js版阿里云签名封装

node.js版阿里云签名封装

作者: 同小类 | 来源:发表于2018-06-14 15:45 被阅读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;

        }

    相关文章

      网友评论

          本文标题:node.js版阿里云签名封装

          本文链接:https://www.haomeiwen.com/subject/pjyyeftx.html