Ejemplo n.º 1
0
        public void TestAgainstAmazonsExample()
        {
            string scope = _scopeBuilder.CreateScope("s3", _testDate);

            GetObjectRequest request = new GetObjectRequest("examplebucket", "test.txt");

            request.SetHeader("host", "examplebucket.s3.amazonaws.com");
            request.SetQueryParameter(AmzParameters.XAmzAlgorithm, SigningConstants.AlgorithmTag);
            request.SetQueryParameter(AmzParameters.XAmzCredential, _options.Value.Credentials.KeyId + '/' + scope);
            request.SetQueryParameter(AmzParameters.XAmzDate, _testDate.ToString(DateTimeFormats.Iso8601DateTime, DateTimeFormatInfo.InvariantInfo));
            request.SetQueryParameter(AmzParameters.XAmzExpires, "86400");
            request.SetQueryParameter(AmzParameters.XAmzSignedHeaders, "host");

            string canonicalRequest = _sigBuilder.CreateCanonicalRequest(request.RequestId, '/' + request.ObjectKey, request.Method, request.Headers, request.QueryParameters, "UNSIGNED-PAYLOAD");

            string expectedCanonicalRequest = "GET" + SigningConstants.Newline +
                                              "/test.txt" + SigningConstants.Newline +
                                              "X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host" + SigningConstants.Newline +
                                              "host:examplebucket.s3.amazonaws.com" + SigningConstants.Newline +
                                              "" + SigningConstants.Newline +
                                              "host" + SigningConstants.Newline +
                                              "UNSIGNED-PAYLOAD";

            Assert.Equal(expectedCanonicalRequest, canonicalRequest);

            string stringToSign = _sigBuilder.CreateStringToSign(_testDate, scope, canonicalRequest);

            string expectedStringtoSign = "AWS4-HMAC-SHA256" + SigningConstants.Newline +
                                          "20130524T000000Z" + SigningConstants.Newline +
                                          "20130524/us-east-1/s3/aws4_request" + SigningConstants.Newline +
                                          "3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04";

            Assert.Equal(expectedStringtoSign, stringToSign);

            byte[] signature = _sigBuilder.CreateSignature(_testDate, stringToSign);

            Assert.Equal("aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404", signature.HexEncode());
        }