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); } }
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); }
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)); }