Skip to content

Commit 90be58e

Browse files
committed
fix: do not sign content-type in s3-request-presigner (aws#1017)
1 parent c66dd4d commit 90be58e

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

packages/s3-request-presigner/src/index.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,23 @@ describe("s3 presigner", () => {
7777
});
7878
expect(minimalRequest).toMatchObject(originalRequest);
7979
});
80+
81+
it("should not sign content-type header", async () => {
82+
const signer = new S3RequestPresigner(s3ResolvedConfig);
83+
const requestWithContentTypeHeader = {
84+
...minimalRequest,
85+
headers: {
86+
...minimalRequest.headers,
87+
"Content-Type": "application/octet-stream"
88+
}
89+
};
90+
const signed = await signer.presignRequest(
91+
requestWithContentTypeHeader,
92+
expiration,
93+
presigningOptions
94+
);
95+
expect(signed.query).toMatchObject({
96+
[SIGNED_HEADERS_QUERY_PARAM]: HOST_HEADER
97+
});
98+
});
8099
});

packages/s3-request-presigner/src/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,13 @@ export class S3RequestPresigner implements RequestPresigner {
3939
public async presignRequest(
4040
requestToSign: IHttpRequest,
4141
expiration: DateInput,
42-
options?: RequestSigningArguments
42+
{ unsignableHeaders = new Set(), ...options }: RequestSigningArguments = {}
4343
): Promise<IHttpRequest> {
44+
unsignableHeaders.add("content-type");
4445
requestToSign.headers[SHA256_HEADER] = UNSIGNED_PAYLOAD;
45-
return this.signer.presignRequest(requestToSign, expiration, options);
46+
return this.signer.presignRequest(requestToSign, expiration, {
47+
unsignableHeaders,
48+
...options
49+
});
4650
}
4751
}

0 commit comments

Comments
 (0)