当我在本地运行ASP dotnet core API(处于发布模式)时,它将使用WCF和客户端证书(X509Certificate2)进行外部调用,并正确返回数据。但是,当将此API部署为Azure App Service时,它会指出“无法识别客户端证书凭据”。 X509Certificate2已从文件系统正确加载(从远程调试中可以看到)。
我尝试使用普通的HttpClient进行呼叫并添加证书,但这给了我相同的结果。 我们还尝试了使用CertificateStore取得相同的结果。
private async Task ProcessRequestAsync(string endpoint, X509Certificate2 certificate, Func<SsoSoapType, Task> action)
{
BasicHttpsBinding binding = new BasicHttpsBinding();
EndpointAddress endpointAddress = new EndpointAddress(new Uri(endpoint));
ChannelFactory<SsoSoapType> factory = new ChannelFactory<SsoSoapType>(binding, endpointAddress);
factory.Credentials.ClientCertificate.Certificate = certificate;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
await action(factory.CreateChannel());
if (factory != null)
{
if (factory.State == CommunicationState.Faulted)
factory.Abort();
else
factory.Close();
}
}
我希望部署的版本的行为与本地版本相同。但显然并非如此。
有人可以解释这出了什么问题吗? 还是由需要相应设置的Azure门户中的某些设置引起的?
亲切的问候, 雅科
答案 0 :(得分:0)
好的,经过一番深入的研究,我发现我的Azure App Service已设置为托管计划“ D1”。这意味着该计算机在不同的应用程序服务之间共享,因此无法利用证书存储(因为您将能够看到其他人的证书)。升级到托管计划“ B1”后,此问题已解决。