skip headers when signing a request
Some checks failed
go: build dev binaries / cleanup (push) Has been cancelled
docker: build dev containers / build-dev-containers (push) Has been cancelled
End to End / FUSE Mount (push) Has been cancelled
go: build binary / Build (push) Has been cancelled
Ceph S3 tests / Ceph S3 tests (push) Has been cancelled
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Has been cancelled
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Has been cancelled
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been cancelled
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been cancelled

fix https://github.com/seaweedfs/seaweedfs/issues/6576#issuecomment-2724577279
This commit is contained in:
chrislu
2025-03-18 08:35:53 -07:00
parent e60aa71890
commit cb33ee006e

View File

@@ -62,6 +62,19 @@ const (
streamingUnsignedPayload = "STREAMING-UNSIGNED-PAYLOAD-TRAILER"
)
// AWS S3 authentication headers that should be skipped when signing the request
// https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
var awsS3AuthHeaders = map[string]struct{}{
"x-amz-content-sha256": {},
"x-amz-security-token": {},
"x-amz-algorithm": {},
"x-amz-date": {},
"x-amz-expires": {},
"x-amz-signedheaders": {},
"x-amz-credential": {},
"x-amz-signature": {},
}
// Returns SHA256 for calculating canonical-request.
func getContentSha256Cksum(r *http.Request) string {
var (
@@ -424,15 +437,11 @@ func (iam *IdentityAccessManagement) doesPresignedSignatureMatch(hashedPayload s
// Save other headers available in the request parameters.
for k, v := range req.URL.Query() {
// Handle the metadata in presigned put query string
if strings.Contains(strings.ToLower(k), "x-amz-meta-") {
query.Set(k, v[0])
}
if strings.HasPrefix(strings.ToLower(k), "x-amz") {
// Skip AWS S3 authentication headers
if _, ok := awsS3AuthHeaders[strings.ToLower(k)]; ok {
continue
}
query[k] = v
}