七牛云——对象存储私有空间下载凭证认证失败401[“error“:“download token auth failed“]解决方案

问题描述

官方文档 

对象存储 > 产品手册 > 安全机制 > 下载凭证:https://developer.qiniu.com/kodo/manual/1202/download-token 

解决方案

1、SECRET_KEY不正确。

SecretKey可在下面这地方获取:

2、 DownloadUrl不完整

DownloadUrl需要包括协议://自定义域名[或者测试域名]/文件名

DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg'

例: 

    /**
     * 获取私有空间文件
     * @param fileKey
     * @return
     */
    public String getPrivateFile(String fileKey) throws Exception{
        String encodedFileName = URLEncoder.encode(fileKey, "utf-8").replace("+", "%20");
        String publicUrl = String.format("%s/%s", "http://" + domain, encodedFileName) ;
        long expireInSeconds = 3600;//1小时,可以自定义链接过期时间
        String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);
        return finalUrl;
    }

 3、官方文档中的注意事项

注意:

  • 为确保客户端、业务服务器和七牛服务器对于授权截止时间的理解保持一致,需要同步校准各自的时钟。频繁返回 401 状态码时请先检查时钟同步性与生成 e 参数值的代码逻辑。

  • token 必须放在请求的最后,token 之后的参数会被忽略。以请求 http://test.cinem.net/aaaa.jpg?e=1778754963&token=sQvk4AXf0rEkzcytkr...XjI0M:zwvwiM0wsMBRj46xcby05U=&attname=geral_TS-PFS3010-8ET为例,此时attname=geral_TS-PFS3010-8ET会被忽略,并不生效。

  • 对于包含中文或其它非英文字符的 Key,需要做到以下两点:

    • Key 本身要做 UTF-8 编码

    • 为 URL 签名之前,对 Path 部分(不含前导 / 符号,通常就是 Key 本身,即上例中的 resource/flower.jpg)做一次URL 安全的 Base64 编码

参考文章

七牛图片下载之Token生成

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页