阿里云 oss web直传node签名

本文提供了一个使用Node.js及Express框架实现签名的代码示例,通过设置过期时间、文件大小限制等条件来生成安全的签名字符串。

以下是我使用node的进行签名代码,node框架是express。

给大家提供一个参考。

晚安

var crypto = require('crypto');
var key = require('../key.js');
var host = 'your oss address';
var dir = 'user_dir/';

exports.getAuth = function(req, res) {
  var expiration = new Date();     // 指定policy过期时间
  var conditions = [];
  var signatureObj = {};           // 待签名对象
  var signature = '';              // 完成的签名字符串
  var base64_policy = null;
  var hmac = null;

  // 一个小坑,UTC默认是不会加上当前时区 orz
  expiration.setHours(expiration.getHours() + 8);
  expiration.setSeconds(expiration.getSeconds() + 10);
  conditions.push(['content-length-range', 0, 1048576000]); // 文件大小
  conditions.push(['starts-with', '$key', dir]);  // 校验目录
  signatureObj.expiration = expiration.toISOString();  // 使用ISO格式日期
  signatureObj.conditions = conditions;
  base64_policy = new Buffer(JSON.stringify(signatureObj)).toString('base64');
  // 创建带有secret秘钥的哈希值
  signature = crypto.createHmac('sha1', key.secret).update(base64_policy).digest().toString('base64');
  //signature = new Buffer(signature).toString('base64'); // 愚蠢的我加了2次base64导致接口老出问题
  if(!base64_policy || !signature) {
    return res.json({
      errCode: 1001,
      msg: '获取签名信息失败'
    });
  }
  return res.json({
    accessid: key.key,
    host: host,
    policy: base64_policy,
    signature: signature,
    expire: +expiration,
    dir: dir
  })
};

转载于:https://my.oschina.net/itudou/blog/754137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值