新开页面下载文件url鉴权

原本通过后端返回的地址,进行a标签新开页面进行下载,但项目后期,发现越权问题,需要前端将token跟账户传过来,进行鉴权验证,

之前的项目中,有sso机构门户去验证当前浏览器是否登陆,目前所在的项目组,因为限制问题,无法之间去浏览器验证用户是否登录,需要前端自己传输token,当时方案两种:

1、通过get请求,header加上token,url拼接参数进行验证,但是因为项目的业务层,视图层分包进行,导致不能通过此种方案

2、通过post,最后验证发现底层的s3限制文件下载的方式,不能为post.

以上两种方案都是由于某些原因,不能实施;

遂只能通过url拼接参数加token,进行base64编码进行访问,代码如下:

if (typeof window !== "undefined") {
      let accesstoken = getAccessHeaderNew().authorization;//token
      let loginAda = window.btoa(getADA());//ada号是账户
      loginAda = loginAda.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');//对编码后的字符串进行正则替换
      let signature = loginAda + '.' + accesstoken;
      let filekey = '/om/aftersales/RR15010000002520220225175340098.pdf'; //get file key from bff api
      let signedUrl = getJwtSignedUrl() + filekey + '?X-Amy-Signature=' + signature;//getJwtSignedUrl() ---域名
      window.open(signedUrl, '_blank');
    }

window.open(),safari浏览器不兼容,safari默认是关闭弹框的,没法发要求用户去打开自己的设置,所以针对safari我们替换当前的url进行下载

        if (downloadUrl) {
            // window.open(signedUrl, "_blank");
            const s3a = document.createElement('a');
            s3a.href = signedUrl;
            let ua = navigator.userAgent.toLowerCase();
            let isSafari = (ua.indexOf('applewebkit') > -1 && ua.indexOf('mobile') > -1 && ua.indexOf('safari') > -1 &&
              ua.indexOf('linux') === -1 && ua.indexOf('android') === -1 && ua.indexOf('chrome') === -1 &&
              ua.indexOf('ios') === -1 && ua.indexOf('browser') === -1);
            if (!isSafari || isDesktop) {//非safari 新开页面,则覆盖当前页面
              s3a.target = "_blank";
            }
            document.body.appendChild(s3a)
            s3a.click()
            document.body.removeChild(s3a)
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值