我正在尝试调用部署到功能应用程序门户的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。