private static void SendConcurrentRequests(IRequestSignerFactory requestSignerFactory, ILogger <WebApplicationClient> logger)
 {
     for (var i = 0; i < 199; i++)
     {
         Task.Factory.StartNew(() => SendRFC3986EscapedRequest(requestSignerFactory, logger), TaskCreationOptions.LongRunning);
     }
 }
        private static async Task SendPostRequest(IRequestSignerFactory requestSignerFactory, ILogger <WebApplicationClient> logger)
        {
            var request = new HttpRequestMessage {
                Method     = HttpMethod.Post,
                RequestUri = new Uri("http://localhost:" + Port + "/userinfo"),
                Content    = new StringContent("{\"id\": 42 }", Encoding.UTF8, MediaTypeNames.Application.Json)
            };

            var requestSigner = requestSignerFactory.CreateFor(KeyId);
            await requestSigner.Sign(request);

            using (var httpClient = new HttpClient()) {
                var response = await httpClient.SendAsync(request);

                if (response.IsSuccessStatusCode)
                {
                    logger?.LogInformation("{0} - POST request response: {1}", response.StatusCode, response.StatusCode);
                }
                else
                {
                    logger?.LogError("{0} - POST request response: {1}", response.StatusCode, response.ReasonPhrase);
                }
                var responseContentTask = response.Content?.ReadAsStringAsync();
                var responseContent     = responseContentTask == null ? null : await responseContentTask;
                if (responseContent != null)
                {
                    logger?.LogInformation(responseContent);
                }
            }
        }
Beispiel #3
0
        private static async Task SendEncodedRequest(IRequestSignerFactory requestSignerFactory, ILogger <WebApplicationClient> logger)
        {
            var request = new HttpRequestMessage {
                Method     = HttpMethod.Get,
                RequestUri = new Uri("http://localhost:" + Port + "/userinfo/api/%7BBrooks%7D%20was%20here/api/David%20%26%20Partners%20%2B%20Siebe%20at%20100%25%20%2A%20co.")
            };

            var requestSigner = requestSignerFactory.CreateFor(KeyId);
            await requestSigner.Sign(request);

            using (var httpClient = new HttpClient()) {
                var response = await httpClient.SendAsync(request);

                if (response.IsSuccessStatusCode)
                {
                    logger?.LogInformation("{0} - Encoded GET request response: {1}", response.StatusCode, response.StatusCode);
                }
                else
                {
                    logger?.LogError("{0} - Encoded GET request response: {1}", response.StatusCode, response.ReasonPhrase);
                }
                var responseContentTask = response.Content?.ReadAsStringAsync();
                var responseContent     = responseContentTask == null ? null : await responseContentTask;
                if (responseContent != null)
                {
                    logger?.LogInformation(responseContent);
                }
            }
        }
        private static async Task SendUnescapedRequest(IRequestSignerFactory requestSignerFactory, ILogger <WebApplicationClient> logger)
        {
            var request = new HttpRequestMessage {
                Method     = HttpMethod.Get,
                RequestUri = new Uri("http://localhost:" + Port + "/userinfo/api/{Brooks} was here/api/David & Partners + Siebe at 100% * co.?query+string={brooks}")
            };

            var requestSigner = requestSignerFactory.CreateFor(KeyId);
            await requestSigner.Sign(request);

            using (var httpClient = new HttpClient()) {
                var response = await httpClient.SendAsync(request);

                if (response.IsSuccessStatusCode)
                {
                    logger?.LogInformation("{0} - Escaped GET request response: {1}", response.StatusCode, response.StatusCode);
                }
                else
                {
                    logger?.LogError("{0} - Escaped GET request response: {1}", response.StatusCode, response.ReasonPhrase);
                }
                var responseContentTask = response.Content?.ReadAsStringAsync();
                var responseContent     = responseContentTask == null ? null : await responseContentTask;
                if (responseContent != null)
                {
                    logger?.LogInformation(responseContent);
                }
            }
        }
        public async Task WhenRequestTargetEscapingSettingIsAMismatch_VerificationFails()
        {
            _serviceProvider = new ServiceCollection()
                               .Configure(services => ConfigureServices(services, RequestTargetEscaping.RFC3986, RequestTargetEscaping.Unescaped))
                               .BuildServiceProvider();
            _requestSignerFactory = _serviceProvider.GetRequiredService <IRequestSignerFactory>();
            _verifier             = _serviceProvider.GetRequiredService <IRequestSignatureVerifier>();

            var request = new HttpRequestMessage {
                RequestUri = new Uri("https://dalion.eu/api/%7BBrooks%7D%20was%20here/api/David%20%26%20Partners%20%2B%20Siebe%20at%20100%25%20%2A%20co.?query%2Bstring=%7BBrooks%7D"),
                Method     = HttpMethod.Post,
                Content    = new StringContent("{'id':42}", Encoding.UTF8, MediaTypeNames.Application.Json),
                Headers    =
                {
                    { "Dalion-App-Id", "ringor" }
                }
            };

            var requestSigner = _requestSignerFactory.CreateFor("e0e8dcd638334c409e1b88daf821d135");
            await requestSigner.Sign(request);

            var receivedRequest = await request.ToServerSideHttpRequest();

            var verificationResult = await _verifier.VerifySignature(receivedRequest, _authenticationOptions);

            verificationResult.IsSuccess.Should().BeFalse();
            if (verificationResult is RequestSignatureVerificationResultFailure failureResult)
            {
                _output.WriteLine("Request signature verification failed: {0}", failureResult.Failure);
            }
        }
Beispiel #6
0
 public OwinSystemTests(ITestOutputHelper output)
 {
     _output               = output;
     _serviceProvider      = new ServiceCollection().Configure(ConfigureServices).BuildServiceProvider();
     _requestSignerFactory = _serviceProvider.GetRequiredService <IRequestSignerFactory>();
     _verifier             = _serviceProvider.GetRequiredService <IRequestSignatureVerifier>();
     _options              = new SignedHttpRequestAuthenticationOptions();
 }
Beispiel #7
0
 public NonceSystemTests()
 {
     _serviceProvider       = new ServiceCollection().Configure(ConfigureServices).BuildServiceProvider();
     _requestSignerFactory  = _serviceProvider.GetRequiredService <IRequestSignerFactory>();
     _verifier              = _serviceProvider.GetRequiredService <IRequestSignatureVerifier>();
     _nonceEnabled          = true;
     _authenticationOptions = new SignedRequestAuthenticationOptions();
 }
Beispiel #8
0
        public Signer()
        {
            var serviceProvider = new ServiceCollection()
                                  .AddHttpMessageSigning()
                                  .BuildServiceProvider();

            _requestSignerFactory = serviceProvider.GetRequiredService <IRequestSignerFactory>();
        }
Beispiel #9
0
 public SupportsOptionalCreatedAndExpiresHeaders(ITestOutputHelper output)
 {
     _output               = output;
     _serviceProvider      = new ServiceCollection().Configure(ConfigureServices).BuildServiceProvider();
     _requestSignerFactory = _serviceProvider.GetRequiredService <IRequestSignerFactory>();
     _verifier             = _serviceProvider.GetRequiredService <IRequestSignatureVerifier>();
     _options              = new SignedRequestAuthenticationOptions();
 }
 public UpdateSigningSettingsBeforeSigning(ITestOutputHelper output)
 {
     _output               = output;
     _serviceProvider      = new ServiceCollection().Configure(ConfigureServices).BuildServiceProvider();
     _requestSignerFactory = _serviceProvider.GetRequiredService <IRequestSignerFactory>();
     _verifier             = _serviceProvider.GetRequiredService <IRequestSignatureVerifier>();
     _options              = new SignedRequestAuthenticationOptions();
 }
        private static async Task <HttpRequestMessage> SampleSignRSA(IRequestSignerFactory requestSignerFactory)
        {
            var request = new HttpRequestMessage {
                RequestUri = new Uri("https://httpbin.org/post"),
                Method     = HttpMethod.Post,
                Content    = new StringContent("{'id':42}", Encoding.UTF8, MediaTypeNames.Application.Json),
                Headers    =
                {
                    { "Dalion-App-Id", "ringor" }
                }
            };

            var requestSigner = requestSignerFactory.CreateFor("4d8f14b6c4184dc1b677c88a2b60bfd2");
            await requestSigner.Sign(request);

            return(request);
        }
        private static async Task <HttpRequestMessage> SampleSignHMAC(IRequestSignerFactory requestSignerFactory)
        {
            var request = new HttpRequestMessage {
                RequestUri = new Uri("https://httpbin.org/post"),
                Method     = HttpMethod.Post,
                Content    = new StringContent("{'id':42}", Encoding.UTF8, MediaTypeNames.Application.Json),
                Headers    =
                {
                    { "Dalion-App-Id", "ringor" }
                }
            };

            var requestSigner = requestSignerFactory.CreateFor("e0e8dcd638334c409e1b88daf821d135");
            await requestSigner.Sign(request);

            return(request);
        }
        private static async Task SendGetRequest(IRequestSignerFactory requestSignerFactory, ILogger <AspNetCoreWebApplicationClient> logger)
        {
            var request = new HttpRequestMessage {
                Method     = HttpMethod.Get,
                RequestUri = new Uri("http://localhost:" + Port + "/userinfo")
            };

            var requestSigner = requestSignerFactory.CreateFor(KeyId);
            await requestSigner.Sign(request);

            using (var httpClient = new HttpClient()) {
                var response = await httpClient.SendAsync(request);

                logger?.LogInformation("GET request response: " + response.StatusCode);
                var responseContentTask = response.Content?.ReadAsStringAsync();
                var responseContent     = responseContentTask == null ? null : await responseContentTask;
                if (responseContent != null)
                {
                    logger?.LogInformation(responseContent);
                }
            }
        }
 public HttpSigningRequestHandler(IRequestSignerFactory requestSignerFactory, SigningKey signingKey)
 {
     _requestSignerFactory = requestSignerFactory;
     _signingKey           = signingKey;
 }