コード例 #1
0
        public void Setup()
        {
            {
                S3Config config = new S3Config();
                config.Region      = AwsRegion.EuWest1;
                config.Credentials = new StringAccessKey("keyidkeyidkeyidkeyid", "accesskeyacceskey123accesskeyacceskey123");

                IOptions <S3Config> options = Options.Create(config);

                SigningKeyBuilder signingKeyBuilder = new SigningKeyBuilder(options, NullLogger <SigningKeyBuilder> .Instance);
                ScopeBuilder      scopeBuilder      = new ScopeBuilder(options);
                SignatureBuilder  signatureBuilder  = new SignatureBuilder(signingKeyBuilder, scopeBuilder, NullLogger <SignatureBuilder> .Instance, options);

                _builder = new HeaderAuthorizationBuilder(options, scopeBuilder, signatureBuilder, NullLogger <HeaderAuthorizationBuilder> .Instance);

                _request = new DummyRequest();
                _request.SetHeader(AmzHeaders.XAmzContentSha256, "UNSIGNED-PAYLOAD");
            }

            {
                _request2    = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://dummyurl");
                _credentials = new ImmutableCredentials("keyidkeyidkeyidkeyid", "accesskeyacceskey123accesskeyacceskey123", null);

                // Add required headers
                _request2.AddHeader(HeaderKeys.XAmzDateHeader, DateTime.UtcNow.ToIso8601BasicDateTime());

                // Add conditional headers
                _request2.AddHeaderIf(_credentials.UseToken, HeaderKeys.XAmzSecurityTokenHeader, _credentials.Token);
                _request2.AddHeaderIf(!_request2.Headers.Contains(HeaderKeys.HostHeader), HeaderKeys.HostHeader, _request2.RequestUri.Host);
            }
        }
コード例 #2
0
        private static void AddHeaders(
            HttpRequestMessage request,
            DateTime now,
            string serviceName,
            ImmutableCredentials credentials,
            string contentHash)
        {
            // Add required headers
            request.AddHeader(HeaderKeys.XAmzDateHeader, now.ToIso8601BasicDateTime());

            // Add conditional headers
            request.AddHeaderIf(credentials.UseToken, HeaderKeys.XAmzSecurityTokenHeader, credentials.Token);
            request.AddHeaderIf(!request.Headers.Contains(HeaderKeys.HostHeader), HeaderKeys.HostHeader, request.RequestUri !.Host);
            request.AddHeaderIf(serviceName == ServiceName.S3, HeaderKeys.XAmzContentSha256Header, contentHash);
        }
コード例 #3
0
        public static async Task <Result> SignAsync(
            HttpClient httpClient,
            HttpRequestMessage request,
            DateTime now,
            string regionName,
            string serviceName,
            ImmutableCredentials credentials)
        {
            if (httpClient == null)
            {
                throw new ArgumentNullException(nameof(httpClient));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (request.Headers.Contains(HeaderKeys.XAmzDateHeader))
            {
                throw new ArgumentException(ErrorMessages.XAmzDateHeaderExists, nameof(request));
            }
            if (request.Headers.Authorization != null)
            {
                throw new ArgumentException(ErrorMessages.AuthorizationHeaderExists, nameof(request));
            }
            if (request.Headers.Contains(HeaderKeys.AuthorizationHeader))
            {
                throw new ArgumentException(ErrorMessages.AuthorizationHeaderExists, nameof(request));
            }
            if (regionName == null)
            {
                throw new ArgumentNullException(nameof(regionName));
            }
            if (serviceName == null)
            {
                throw new ArgumentNullException(nameof(serviceName));
            }
            if (serviceName == "s3")
            {
                throw new NotSupportedException(ErrorMessages.S3NotSupported);
            }
            if (credentials == null)
            {
                throw new ArgumentNullException(nameof(credentials));
            }

            UpdateRequestUri(httpClient, request);

            // Add required headers
            request.AddHeader(HeaderKeys.XAmzDateHeader, now.ToIso8601BasicDateTime());

            // Add conditional headers
            request.AddHeaderIf(credentials.UseToken, HeaderKeys.XAmzSecurityTokenHeader, credentials.Token);
            request.AddHeaderIf(!request.Headers.Contains(HeaderKeys.HostHeader), HeaderKeys.HostHeader, request.RequestUri.Host);

            // Build the canonical request
            var(canonicalRequest, signedHeaders) = await CanonicalRequest.BuildAsync(request, httpClient.DefaultRequestHeaders);

            // Build the string to sign
            var(stringToSign, credentialScope) = StringToSign.Build(
                now,
                regionName,
                serviceName,
                canonicalRequest);

            // Build the authorization header
            var authorizationHeader = AuthorizationHeader.Build(
                now,
                regionName,
                serviceName,
                credentials,
                signedHeaders,
                credentialScope,
                stringToSign);

            // Add the authorization header
            request.Headers.TryAddWithoutValidation(HeaderKeys.AuthorizationHeader, authorizationHeader);

            return(new Result(canonicalRequest, stringToSign, authorizationHeader));
        }