Как программно отправить вызов в Azure Functions с клиентским сертификатом? - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь вызвать функцию Azure, которая развернута на портале приложения моей функции.В коде, который я проверяю для сертификата клиента, но он всегда равен нулю.

Я создал модульный тест для вызова моей функции Azure как в Azure, так и локально, отладка показала, что сертификат клиента всегда имеет значение null,Мне интересно, есть ли альтернативный способ проверки, когда вы работаете с ASP.Net Core или функциями Azure в целом.

Это мой модульный тест:

        public void TEST()
        {
            //Create default certificate
            var cert = new X509Certificate2(File.ReadAllBytes(@"test.pfx"), "test123");
            var clientHandler = new HttpClientHandler();
            clientHandler.ClientCertificates.Add(cert);
            clientHandler.UseDefaultCredentials = false;

            HttpClient httpClient = new HttpClient(clientHandler);
            httpClient.BaseAddress = new Uri(functionHost);
            httpClient.DefaultRequestHeaders.Accept.Clear();

            var apiResponse = httpClient.GetAsync(URL).Result;
            string apiResult = apiResponse.Content.ReadAsStringAsync().Result;
            apiResponse.EnsureSuccessStatusCode();
        }

Это моя функция тестового подключения в контроллере, просто для подтверждения концепции:

        [HttpGet]
        [FunctionName("TestConnection")]
        public IActionResult TestConnection([HttpTrigger(AuthorizationLevel.Function, "get", Route = "TestConnection")] HttpRequest req)
        {
            TelemetryClient telemetryClient = new TelemetryClient();
            telemetryClient.InstrumentationKey = ConfigManager.GetConfig["InstrumentationKey"];
            var a = req; //break here and check
            //custom validation code done here, will throw error if not Ok
            return Ok();
        }

Я пыталсячтобы отправить сертификат клиента (test.pfx), и я хотел проверить, что запрос HttpRequest - через req.HttpContext.Connection.ClientCertificate - будет показывать что-то из test.pfx, но вместо этого это ноль.

В качестве альтернативы,Я могу избавиться от всей этой проверки для сертификата клиента в моем коде и включить SSL на моем портале функций Azure.Я также загружаю тот же сертификат test.pfx в Azure.Когда я делаю это и запускаю свой модульный тест, я получаю ошибку 403 - и при проверке телеметрии я вижу, что сертификат клиента все еще нулевой.

Неправильно ли я передаю сертификат клиента?Разве HttpClient не отправляет сертификат в приложения-функции Azure?Как это можно сделать правильно?

Я ожидал либо:

req.HttpContext.Connection.ClientCertificate, чтобы иметь некоторый сертификат клиента вместо нулевого значения.

ИЛИ

чтобы получить 200 в моем тестовом соединении при переходе по маршруту функции Azure SSL вместо 400.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...