如何以编程方式使用客户端证书向Azure Functions发送呼叫?

时间:2019-06-11 18:23:04

标签: .net azure asp.net-core azure-function-app

我正在尝试调用部署到功能应用程序门户的Azure功能。在代码中,我测试了客户端证书,但是它始终为空。

我创建了一个单元测试来在Azure和本地上调用我的Azure函数,调试显示客户端证书始终为空。我想知道在一般情况下使用ASP.Net Core或Azure Functions时是否还有另一种测试方法。

这是我的单元测试:

        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的内容,但是它为空。

或者,我可以在代码中摆脱所有对客户端证书的检查,并在Azure功能门户上启用SSL。我还将相同的test.pfx证书上传到Azure。当我这样做并运行我的单元测试时,我收到403错误-在检查遥测时,我看到客户端证书仍然为空。

我通过错误的方式通过了客户证书吗? HttpClient是否不将证书发送到Azure Function Apps?如何正确完成?

我期望的是:

req.HttpContext.Connection.ClientCertificate具有一些客户端证书而不是空值。

OR

在使用Azure Function SSL路由时在测试连接中获得200,而不是400。

0 个答案:

没有答案