在这之前, 可以去看一下其他人的答案, 本文只针对脚本做出少量修改.传送门
js脚本做出以下修改:
/*
创建待签名字符串
此方法为简化版,仅处理不带url参数的oss资源地址,其他情况可结合oss文档 + ali-oss sdk 文件内signUtil模块内的buildCanonicalString方法做修改
*/
function buildCanonicalString (method, resourcePath, date) {
var signContent = [method.toUpperCase(), '', '', date, resourcePath]
return signContent.join('\n')
}
/* 计算签名字符串 */
function computeSignature (accessKeySecret, canonicalString) {
var signature = require('crypto').createHmac('sha1', accessKeySecret)
return signature.update(canonicalString.toUTF8()).digest('base64')
}
/* 生成完整认证字符串 */
function authorization (accessKeyId, accessKeySecret, canonicalString) {
return 'OSS ' + accessKeyId + ':' + computeSignature(accessKeySecret, canonicalString)
}
/* oss签名配置数据,换成你自己的PAM账号的AK和bucket */
var ossAccess = {
accessKeyId: 'accessKeyId',
accessKeySecret: 'accessKeySecret',
bucket: 'bucket'
}
var GMTdate = '';
/* 返回oss header date字符串 */
function getGMTtime (r) {
/* 函数运行在http环境,如果有多个server最好加上判断条件来避免不必要的消耗 */
if (r.headersIn.host !== 'oss.kagenz.com') return '';
/* nginx 环境下 toUTCString 函数和标准有差异, 此处做转换处理,后续njs版本升级后可能需要修改 */
var currentDate = new Date();
var currentDateUTCStr = currentDate.toUTCString();
var dateStrs = currentDateUTCStr.split(' ');
/* 这里需要改动一下处理方式 */
var result = dateStrs[0] + ' ' + dateStrs[1] + ' ' + dateStrs[2] + ' ' + dateStrs[3] + ' ' + dateStrs[4] + ' GMT';
GMTdate = result;
return result;
}
/* 返回oss header authorization字符串 */
function ossSign (r) {
if (r.headersIn.host !== 'oss.kagenz.com') return ''
var method = r.method
var canonicalString = buildCanonicalString(method, '/' + ossAccess.bucket + r.uri, GMTdate)
return authorization(ossAccess.accessKeyId, ossAccess.accessKeySecret, canonicalString)
}
/* 这里需要添加export */
export default { getGMTtime, ossSign };