阿里oss服务端签名直传并设置上传回调_node版

阿里oss服务端签名直传并设置上传回调_node版

存储服务

image.png

阿里没有官方示例,这里用node已经成功实现上传和回调校验的问题

上传接口

最终吧result返回出去就可以了

// 处理policy 数据
let end = new Date().getTime() + 360000;
let expiration = new Date(end).toISOString();
let policyString = {
  expiration,
  conditions: [
    { bucket: `${bucket}` }, // 指定bucket
    ['content-length-range', 0, 1048576000], // 自定义文件大小
    ['starts-with', '$key', dir] // 自定义文件路径
  ]
};
policyString = JSON.stringify(policyString);
const base64Policy = Buffer.from(policyString).toString('base64');

// 处理callback数据
let callbackString = {
  callbackUrl: encodeURI(callbackUrl), // 回调地址
  callbackBody:
    'bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}&format=${imageInfo.format}',
  callbackBodyType: 'application/x-www-form-urlencoded'
};
let base64CallbackBody = Buffer.from(JSON.stringify(callbackString)).toString('base64');
const signature = Crypto.createHmac('sha1', accessKeySecret)
  .update(base64Policy)
  .digest('base64');

let result = {
  accessid: accessKeyId,
  host,
  policy: base64Policy,
  signature,
  expire: end,
  callback: base64CallbackBody,
  dir
};

回调处理

  1. 普通回调如果不校验参数可以直接返回200,或者自行添加需要的逻辑
    我们这里因为为了符合阿里示例的回调校验,弄了好久,可能还是技术有问题,最后是通过引用别人写的包才处理成功(这一步是非必要的,阿里自己写标注了可选)回调

  2. 这里我们主要引用的包就是帮我们做解密校验的
    npm i jsrsasign

  3. 拼接字符串那一块如果有不同的可以查看上面回调的阿里文档

// 1.获取oss签名的header和公钥
let authorizationBase64 = '';
let pubKeyUrlBase64 = '';
console.log(params);
console.log(ctx.header);
if (ctx.header && ctx.header.authorization) {
  authorizationBase64 = ctx.header.authorization;
}
if (ctx.header && ctx.header['x-oss-pub-key-url']) {
  pubKeyUrlBase64 = ctx.header['x-oss-pub-key-url'];
}

if (!authorizationBase64 || !pubKeyUrlBase64) {
  return ctx.success({ status: 1, msg: '未校验' });
}

// 2.获取公钥
let pubKeyUrl = Buffer.from(pubKeyUrlBase64, 'base64').toString('utf-8');
const pubKey = await ctx.helper.httpRequest({
  url: pubKeyUrl,
  method: 'GET',
  params
});
if (!pubKey) {
  return ctx.success({ status: 1, msg: 'obtain' });
}

// 3.拼接签名
let path = '/public/ossCallback';
let authStr = `${path}\n${querystring.stringify(params)}`;

// 4.校验签名
let aa = this.RSA_VERIFY_SIGN(pubKey, authStr, authorizationBase64);


// 校验方法
RSA_VERIFY_SIGN(publicKey, src, data) {
  const signature = new rs.KJUR.crypto.Signature({
    alg: 'MD5withRSA',
    prvkeypem: publicKey
  });
  signature.updateString(src); // 传入待签明文
  return signature.verify(Buffer.from(data, 'base64').toString('hex'));
}

总结

至此我们就完成了上传和回调校验的工作
前端的代码就不展示了,调用方法取结果并调用返回的url上传文件
反正我前端也很渣

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352