.NET版本的OSS的web直传,一直报签名错误(SignatureDoesNotMatch)-问答-阿里云开发者社区-阿里云

开发者社区> tommmylee> 正文

.NET版本的OSS的web直传,一直报签名错误(SignatureDoesNotMatch)

2016-04-26 17:53:06 4901 5

现有的例子只有JAVA和PHP版本,依葫芦画瓢的写了一个.NET版本,但是一直报错,错误详情是:

The request signature we calculated does not match the signature you provided. Check your key and signing method.

应该是请求的签名不正确,但是JAVA版本里是有calculatePostSignature方法的,而.NET版本则没有这个方法
只能手动写了一个SHA1加密方法,但是结果不对。

取消 提交回答
全部回答(5)
  • 陈惊蛰
    2019-12-16 10:18:00

    这个问题估计要骂骂写java版本demo的人了. 上java代码段:

    String postPolicy = client.generatePostPolicy(expiration, policyConds);
    byte[] binaryData = postPolicy.getBytes("utf-8");
    String encodedPolicy = BinaryUtil.toBase64String(binaryData);
    String postSignature = client.calculatePostSignature(postPolicy);
    

    注意看calculatePostSignature方法传入的参数, 感情前面搞了一堆toBase64,这里传的竟然还是原postPolicy字符串. 然而如果你改装成.net了,就千万记得这里要用encodedPolicy去做加密!

    3 0
  • EdisonZhou
    2019-07-17 18:48:34

    分享一个基于阿里云OSS SDK来生成签名的方法代码示例,供参考:

        /// <summary>
        /// 生成浏览器端签名
        /// </summary>
        /// <param name="dir">上传的目标文件夹</param>
        /// <returns>签名信息</returns>
        public OssSignature SignGen(string dir)
        {
            var now = DateTime.Now;
            var ex = now.AddMinutes(30);
            var policyCods = new PolicyConditions();
            policyCods.AddConditionItem("content-length-range", 0L, 1048576000L);
            policyCods.AddConditionItem(MatchMode.StartWith, "key", dir);
            var postPolicy = _ossClient.GeneratePostPolicy(ex, policyCods);
            var binaryData = Encoding.Default.GetBytes(postPolicy);
            var encodedPolicy = Convert.ToBase64String(binaryData);
            var hmac = new HMACSHA1(Encoding.UTF8.GetBytes("你的AccessKeySecret"));
            var hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(encodedPolicy));
            var signature = Convert.ToBase64String(hashBytes);
            DateTime startTime = CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
    
            return new OssSignature
            {
                AccessId = XdpOssConfig.AliyunOssConfig.AccessKeyId,
                Policy = encodedPolicy,
                Signature = signature,
                Dir = dir,
                EndPoint = XdpOssConfig.AliyunOssConfig.EndPoint,
                Expire = (long)(ex - startTime).TotalMilliseconds
            };
        }
    1 0
  • stone哥
    2019-07-17 18:48:34

    // 算法参考:https://help.aliyun.com/document_detail/27135.html?spm=5176.8232292.domaindetail.19.IN2iTT
    // 核心代码如下,可以参考一下:

    var timestamp = (int)(expireDate - new DateTime(1970, 1, 1)).TotalSeconds;
    var rand = new Random().Next();
    var md5Value = GetMd5(string.Format("/{0}-{1}-{2}-{3}-{4}", key, timestamp, rand, 0, privateKey));
    cdnUrl += string.Format("&auth_key={0}-{1}-{2}-{3}", timestamp, rand, 0, md5Value);
    return cdnUrl;

    0 0
  • zeego
    2019-07-17 18:48:34

    我也遇到这个问题,头都大了,官方能不能解决一下

    0 0
  • 木洛
    2019-07-17 18:48:33

    这个最好参考OSS API文档里提供的签名字符串和签名后的值,对一下是签名字符串拼错了,还是SHA1等签名算法用错了。

    如果还调试不过,只能发工单找他们的开发来review代码了。

    0 0
添加回答
相关问答

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 222948浏览量 回答数 162

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157050浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333808浏览量 回答数 8

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 292243浏览量 回答数 110

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 643039浏览量 回答数 18

33

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 277475浏览量 回答数 33

1

回答

foxmail 关联企业邮箱提示邮箱地址或者密码错误

2017-12-30 21:50:39 150600浏览量 回答数 1

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302568浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 471289浏览量 回答数 24

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 203984浏览量 回答数 2
+关注
0
文章
1
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载