Face++(旷视)Nodejs生成签名

428 阅读1分钟

官方地址

签名流程

生成签名

计算规范化请求字符串的HMAC-SHA1值,并和规范化请求字符串拼接后进行base64编码,公式如下:

raw = "a={}&b={}&c={}&d={}".format(api_key, expire_time, current_time, random)
sign_tmp = hmac.new(api_secret, raw, hashlib.sha1).digest()
sign = base64.b64encode(sign_tmp + raw)

Face++生成签名,提供了Python、Java、PHP版本,贴一个Nodejs版本

const crypto = require('crypto')

const base64 = {
    decode: s => Buffer.from(s, 'binary'),
    encode: b => Buffer.from(b, 'binary').toString('base64')
};

function createSign(apiKey, secretKey, expired) {

    const now = Math.floor(Date.now() / 1000);
    const rmd = Math.random().toString().slice(2, 12);
    const raw = `a=${apiKey}&b=${now + expired}&c=${now}&d=${rmd}`;

    const sign_tmp = crypto
        .createHmac("sha1", secretKey)
        .update(raw)
        .digest('binary');
    return base64.encode(sign_tmp + raw);
}
  • 加密后转二进制,encode也需要设置二进制,也是我一开始没明白的地方