Skip to content

Commit 91d458e

Browse files
committed
Fix presigned URL support.
1 parent 223c2dd commit 91d458e

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

sdk/src/Core/Amazon.Runtime/Internal/Auth/AWS4aSigningResult.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16+
using Amazon.Util;
1617
using System;
18+
using System.Globalization;
1719
using System.Text;
1820

1921
namespace Amazon.Runtime.Internal.Auth
@@ -38,7 +40,7 @@ public class AWS4aSigningResult : AWSSigningResultBase
3840
/// <param name="awsAccessKeyId">The access key that was included in the signature</param>
3941
/// <param name="signedAt">Date/time (UTC) that the signature was computed</param>
4042
/// <param name="signedHeaders">The collection of headers names that were included in the signature</param>
41-
/// <param name="scope">Formatted 'scope' value for signing (YYYYMMDD/region/service/aws4_request)</param>
43+
/// <param name="scope">Formatted 'scope' value for signing (YYYYMMDD/service/aws4_request)</param>
4244
/// <param name="regionSet">The set of AWS regions this signature is valid for</param>
4345
/// <param name="signature">Computed signature</param>
4446
/// <param name="service">Service the request was signed for</param>
@@ -87,6 +89,25 @@ public override string ForAuthorizationHeader
8789
}
8890
}
8991

92+
/// <summary>
93+
/// Returns the signature in a form usable as a set of query string parameters.
94+
/// </summary>
95+
public string ForQueryParameters
96+
{
97+
get
98+
{
99+
var authParams = new StringBuilder()
100+
.AppendFormat("{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzAlgorithm, false), AWSSDKUtils.UrlEncode(AWS4Signer.AWS4aAlgorithmTag, false))
101+
.AppendFormat("&{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzRegionSetHeader, false), AWSSDKUtils.UrlEncode(RegionSet, false))
102+
.AppendFormat("&{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzCredential, false), AWSSDKUtils.UrlEncode(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", AccessKeyId, Scope), false))
103+
.AppendFormat("&{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzDateHeader, false), AWSSDKUtils.UrlEncode(ISO8601DateTime, false))
104+
.AppendFormat("&{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzSignedHeadersHeader, false), AWSSDKUtils.UrlEncode(SignedHeaders, false))
105+
.AppendFormat("&{0}={1}", AWSSDKUtils.UrlEncode(HeaderKeys.XAmzSignature, false), AWSSDKUtils.UrlEncode(Signature, false));
106+
107+
return authParams.ToString();
108+
}
109+
}
110+
90111
/// <summary>
91112
/// Returns the set of regions this signature is valid for
92113
/// </summary>
@@ -99,6 +120,7 @@ public string RegionSet
99120
/// <summary>
100121
/// Returns the full presigned Uri
101122
/// </summary>
123+
[Obsolete("This property is always empty in objects returned by AWS4aSigner. Use the ForQueryParameters property instead, to get the query parameters for a presigned URL.")]
102124
public string PresignedUri
103125
{
104126
get { return _presignedUri; }

sdk/src/Services/S3/Custom/AmazonS3Client.Extensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,8 @@ private static SigningResult ReturnSigningResult(SignatureVersion signatureVersi
388388
immutableCredentials,
389389
"s3",
390390
arn.IsMRAPArn() ? "*" : "");
391-
signingResult.Result = signingResult4a.PresignedUri;
391+
signingResult.Authorization = "&" + signingResult4a.ForQueryParameters;
392+
signingResult.Result = ComposeUrl(iRequest).AbsoluteUri + signingResult.Authorization;
392393
break;
393394
case SignatureVersion.SigV4:
394395
var aws4Signer = new AWS4PreSignedUrlSigner();

0 commit comments

Comments
 (0)