OSS在private權限下的無參數訪問(Nginx反向代理實現)

在這之前, 可以去看一下其他人的答案, 本文只針對腳本做出少量修改.傳送門

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 };
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容