美文网首页
OSS在private权限下的无参数访问(Nginx反向代理实现

OSS在private权限下的无参数访问(Nginx反向代理实现

作者: kagenZhao | 来源:发表于2021-01-15 18:04 被阅读0次

    在这之前, 可以去看一下其他人的答案, 本文只针对脚本做出少量修改.传送门

    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 };
    

    相关文章

      网友评论

          本文标题:OSS在private权限下的无参数访问(Nginx反向代理实现

          本文链接:https://www.haomeiwen.com/subject/xsvwaktx.html