【发布时间】:2018-08-11 21:03:13
【问题描述】:
我正在尝试为 S3 中的 GET 对象请求创建签名 URL。我让这段代码完美地工作在 S3 中,但我似乎无法让它为 GET 工作。我用这个代码在 URL 上签名
//Create the signed url using the company id
func (user *User) signURLForUser(sess *session.Session) (*URLSign, error) {
svc := s3.New(sess)
svc.Config.Region = aws.String(os.Getenv("REGION"))
req, _ := svc.GetObjectRequest(&s3.GetObjectInput{
Bucket: aws.String("bucket"),
Key: aws.String(user.CompanyID + "/" + user.FileRequest),
})
var urlSign URLSign
//urlSign.Size = *out.ContentLength
str, err := req.Presign(time.Minute * 60 * 24 * 5) //Expire in 5 days
if err != nil {
log.Println("Error signing URL Request")
return nil, err
}
urlSign.URL = str
return &urlSign, nil
}
但是当我尝试使用它返回的 URL 时,我得到了这个错误:
<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>X-Amz-Algorithm only supports "AWS4-HMAC-SHA256"</Message>
<RequestId>9D7CFB14B195A260</RequestId>
<HostId>
Dgh+SqrHbrdKcbkCYrAj3nObLMAwS7k5+VR1zwC/8ZMS3S4++IAAEXXh3zMZ3CpOAyxX1Kc7Opg=
</HostId>
</Error>
我检查了 IAM 权限,它们是为 GetObject 设置的。我想不出我还做错了什么。
编辑:这是 URL 的示例 当然: https://rsmachiner-user-code.s3.amazonaws.com//CFDMP_ServoGear.gcode?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAVEENPDKJRUDZKEVM%2F20180812%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-日期= 20180812T005443Z&X-AMZ-过期= 432000&X-AMZ-安全令牌= FQoGZXIvYXdzEBoaDIVdv9t408gWWi9vvSLjAaa0pZNA%2BXu83%2FFSyng4XvFdv5%2B7nRB%2FQydMLyi%2BBS84yXqwP6VYn7VlInw4ip1M0lkjHRXQf8OAvQLPrIl%2FQZoTe%2Fy3N6bqhLDOnFVJ3UZzYDQ4%2FbX%2Brc6mvVbkhRsQPiarKBuLYDiOD%2FNoSaItMwI9FsMDknw1qX0Pf%2BZ5La0GmanHrTt9YUI01cIUKJ40No5mKJIwcXw3%2F5QOpUc59rZ2zEzlWP9OXeEwWKp%2Bog5P0v7ABX1lRPsCx4HGEstKhw3ZWmJfQhAcAvhrjmXIMqGNKkaCI5L0ap23jf4GvPMGd4%2BcKIKKvtsF&X-AMZ-SignedHeaders =主机&X-Amz-Signature=82dfb9b392b5e1ef44c7140259ad884e696b48f8094bdd2d223b8650ebdf59f7
【问题讨论】:
-
这与权限无关。 URL 的实际格式有问题。你能和我们分享其中一个吗?
-
我使用其中一个 URL 添加了一个编辑。
-
我知道问题出在哪里,& 被替换为 \u。我只是不知道为什么。
-
这与go的字节到字符串转换有关。我将 json 对象解组为一个结构,现在记录它时一切看起来都是正确的。
-
无关,但
s3.amazonaws.com/<--this-->/CFDMP_ServoGear.gcode?X-会在某些时候给您带来麻烦。 S3 对象键不应有前导斜杠,但出现在 URL 中的//表明您正在添加它们。这最终会导致意外/奇怪/令人困惑的行为或兼容性问题。正确的对象键是cat.jpg或pics/cat.jpg,not/cat.jpg或/pics/cat.jpg... 但您需要在上传端和下载端修复此问题。最好现在修复它而不是以后修复它。