예제 #1
0
        public void TestSignerScope(IClientConfig config, string expectedAuthRegion, string expectedAuthService, string expectedEndpoint)
        {
            var signer  = new AWS4Signer();
            var mock    = new Moq.Mock <IRequest>().SetupAllProperties();
            var request = mock.Object;

            mock.SetupGet(x => x.Headers).Returns(new Dictionary <string, string>());
            request.Endpoint = EndpointResolver.DetermineEndpoint(config, request);

            var result = signer.SignRequest(request, config, null, "accessKey", "secretKey");

            var scopePieces = result.Scope.Split('/'); // expected to be date/region/service/aws4_request

            Assert.AreEqual(expectedAuthRegion, scopePieces[1]);
            Assert.AreEqual(expectedAuthService, scopePieces[2]);
            Assert.AreEqual(expectedEndpoint, request.Endpoint.Host);
        }
예제 #2
0
        public override void Sign(IRequest request, IClientConfig clientConfig, RequestMetrics metrics, string awsAccessKeyId, string awsSecretAccessKey)
        {
            AWS4Signer val = this.SelectSigner(this, _useSigV4, request, clientConfig) as AWS4Signer;

            if (val != null)
            {
                AmazonS3Uri    amazonS3Uri;
                RegionEndpoint alternateEndpoint = default(RegionEndpoint);
                if (AmazonS3Uri.TryParseAmazonS3Uri(request.get_Endpoint(), out amazonS3Uri) && amazonS3Uri.Bucket != null && BucketRegionDetector.BucketRegionCache.TryGetValue(amazonS3Uri.Bucket, ref alternateEndpoint))
                {
                    request.set_AlternateEndpoint(alternateEndpoint);
                }
                AWS4SigningResult val2 = val.SignRequest(request, clientConfig, metrics, awsAccessKeyId, awsSecretAccessKey);
                request.get_Headers()["Authorization"] = val2.get_ForAuthorizationHeader();
                if (request.get_UseChunkEncoding())
                {
                    request.set_AWS4SignerResult(val2);
                }
            }
            else
            {
                SignRequest(request, metrics, awsAccessKeyId, awsSecretAccessKey);
            }
        }