mozillazg / go-cos

腾讯云对象存储服务 COS(Cloud Object Storage) Go SDK(XML API)
https://godoc.org/github.com/mozillazg/go-cos
MIT License
88 stars 26 forks source link

Message: The Signature you specified is invalid. #2

Closed SoloMagic closed 6 years ago

SoloMagic commented 6 years ago

<?xml version='1.0' encoding='utf-8' ?>

SignatureDoesNotMatch The Signature you specified is invalid.
mozillazg commented 6 years ago

我这边测试了一下,没问题。麻烦提供可以复现问题的最简代码。

nEdAy commented 6 years ago

使用的是您的auth.go authTime := NewAuthTime(defaultAuthExpire) return c.String(http.StatusOK, newAuthorization(secretID, secretKey, req, authTime))

小程序测试返回403 SignatureDoesNotMatch

The Signature you specified is invalid.

官方wx_sdk生成的authorization 是ok的 var authorization = COS.getAuthorization({ SecretId: config.SecretId, SecretKey: config.SecretKey, Method: params.Method, Key: params.Key });

对比生成的authorization只有q-signature不同,是不是算法实现上有问题 我晚上再仔细看看

nEdAy commented 6 years ago

小程序部分逻辑我是参照 https://github.com/piscium2010/cos-wx-upload-file 您可以试试

carsonxu commented 6 years ago

qcloud 出的 demo 有这个: https://github.com/tencentyun/cos-wx-sdk-v5

nEdAy commented 6 years ago

官方只有js和php的鉴权服务

mozillazg commented 6 years ago

@nEdAy 你可以用你的 bucket、secret_id、secret_key 测试一下上传功能:

export COS_BUCKET_URL=https://<bucket>-<appid>.cos.<region>.myqcloud.com
export COS_SECRETID=xx
export COS_SECRETKEY=xxx
go run _example/object/uploadFile.go

我刚测试了一下没发现问题:

$ go run _example/object/uploadFile.go
5636484
PUT /test%2fuploadFile.go HTTP/1.1
Host: test-1253846586.cos.ap-beijing-1.myqcloud.com
User-Agent: go-cos/0.8.0
Content-Length: 5636484
Authorization: q-sign-algorithm=sha1&q-ak=AKIDxnW4SdORtFPU1We7B5n7LShsjW7WpkZB&q-sign-time=1527723637;1527727237&q-key-time=1527723637;1527727237&q-header-list=content-length&q-url-param-list=&q-signature=b4f3aec6bf7ab01988f67af3d682af45898c3a76
Accept-Encoding: gzip

HTTP/1.1 200 OK
Content-Length: 0
Connection: keep-alive
Content-Type: application/xml
Date: Wed, 30 May 2018 23:40:49 GMT
Etag: "cf6dbd9a4353245fa98707b9a5cc2e63"
Server: tencent-cos
X-Cos-Request-Id: NWIwZjM2NzdfMmZiNTM1MGFfMzczNl8yMjY0MTQ=

初步判断可能是你的 req 中的 url 不是你实际想请求的 cos api url 。 如果你的 req 是小程序客户端发起的 req ,那你需要手动构造一个新的 http.Request,这个新的req 应该包含 cos api 需要的一些信息(url(key), header等)。