Skip to content

Commit ec01e3b

Browse files
committed
Fix 403 Forbidden errors with v4 signatures
Fixes APIs-guru#8 Changes the Version and Action parameters to be in 'query' instead of 'header'. This aligns with AWS docs, examples, and the official AWS SDK client behavior.
1 parent 6f2076d commit ec01e3b

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

index.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
99
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html
1010
*/
1111

12-
const amzHeaders = ['Action','Version','X-Amz-Content-Sha256','X-Amz-Date','X-Amz-Algorithm','X-Amz-Credential','X-Amz-Security-Token',
12+
const amzHeaders = ['X-Amz-Content-Sha256','X-Amz-Date','X-Amz-Algorithm','X-Amz-Credential','X-Amz-Security-Token',
1313
'X-Amz-Signature','X-Amz-SignedHeaders'];
1414
const s3Headers = ['x-amz-security-token'];
1515
const v2Params = ['AWSAccessKeyId', 'Action', 'SignatureMethod', 'SignatureVersion', 'Timestamp', 'Version', 'Signature'];
16+
const v4Required = ['Action', 'Version'];
17+
const v4Params = [].concat(v4Required, amzHeaders);
1618

1719
var multiParams = [];
1820

@@ -589,6 +591,15 @@ module.exports = {
589591

590592
// https://docs.aws.amazon.com/IAM/latest/APIReference/CommonParameters.html
591593

594+
for (var p in v4Required) {
595+
var param = {};
596+
param.name = v4Required[p];
597+
param["in"] = 'query';
598+
param.type = 'string';
599+
param.required = true;
600+
s.parameters[v4Required[p]] = param;
601+
}
602+
592603
for (var h in amzHeaders) {
593604
var header = {};
594605
header.name = amzHeaders[h];
@@ -597,8 +608,6 @@ module.exports = {
597608
header.required = false;
598609
s.parameters[amzHeaders[h]] = header;
599610
}
600-
s.parameters.Action.required = true;
601-
s.parameters.Version.required = true;
602611

603612
}
604613
else if (src.metadata.signatureVersion == 's3') {
@@ -834,9 +843,9 @@ module.exports = {
834843
s.paths[url] = path; // path contains action
835844
if (sigV4Headers) {
836845
s.paths[url].parameters = [];
837-
for (var h in amzHeaders) {
846+
for (var h in v4Params) {
838847
var param = {};
839-
param["$ref"] = '#/parameters/'+amzHeaders[h];
848+
param["$ref"] = '#/parameters/'+v4Params[h];
840849
s.paths[url].parameters.push(param);
841850
}
842851
}

0 commit comments

Comments
 (0)