百度智能云生成认证签名node版

没有找到百度云签名SDK的node版本,写一个demo供使用:

const rp = require('request-promise');
const crypto = require('crypto');

// 百度云配置,改成自己所需接口的配置
const AccessKeyId = "xxxxxxx";
const SecretAccessKey = "xxxxxxx";
const Host = "xxx.baidubce.com";
const ContentType = "application/json; charset=utf-8";



// 调用百度云接口,传接口uri和json参数
async function apiAction(uri, params) {
  let timestamp = getTimestampString();
  let queryString = getQueryString(params);
  let Authorization = getAuthString(uri, queryString, timestamp);
  let res = await rp({
    url: "https://" + Host + uri + "?" + queryString,
    method: "POST",
    json: true,
    body: params,
    headers: {
      "Authorization": Authorization,
      "Content-Type": ContentType,
      "Host": Host,
      "x-bce-date": timestamp
    }
  });
  return res;
}

// 获取UTC时间
function getTimestampString() {
  return new Date().toISOString().replace(/\.\d*/, '');
}

// 获取参数拼接字符串
function getQueryString(params) {
  let queryString = "";
  let paramKeyArray = [];
  if (params) {
    for (let key in params) {
      paramKeyArray.push(key);
    }
    paramKeyArray = paramKeyArray.sort();
  }
  if (paramKeyArray && paramKeyArray.length > 0) {
    for (let key of paramKeyArray) {
      queryString += encodeURIComponent(key) + "=" +
        encodeURIComponent(params[key]) +
        "&";
    }
    queryString = queryString.substr(0, queryString.length - 1);
  }
  return queryString;
}

// 签名
function getAuthString(CanonicalURI, CanonicalQueryString, timestamp) {
  // 1
  const expirationPeriodInSeconds = 120;
  let authStringPrefix = `bce-auth-v1/${AccessKeyId}/${timestamp}/${expirationPeriodInSeconds}`;
  // 2
  let signedHeaders = 'host;x-bce-date';
  let CanonicalHeaders = encodeURIComponent("host") + ":" + encodeURIComponent(Host) +
    "\n" +
    encodeURIComponent('x-bce-date') + ":" + encodeURIComponent(timestamp);
  let Method = 'POST';
  let CanonicalRequest = Method + '\n' + CanonicalURI + '\n' + CanonicalQueryString + '\n' + CanonicalHeaders;
  // 3
  let SigningKey = crypto
    .createHmac('sha256', SecretAccessKey)
    .update(authStringPrefix)
    .digest()
    .toString('hex');
  // 4
  let Signature = crypto
    .createHmac('sha256', SigningKey)
    .update(CanonicalRequest)
    .digest()
    .toString('hex');
  // 5
  let authorization = `${authStringPrefix}/${signedHeaders}/${Signature}`;
  return authorization;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

imooos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值