Azure 应用服务 "The Client Certificate Credentials Were Not Recognized"
Azure App Service "The Client Certificate Credentials Were Not Recognized"
当我 运行 我的 ASP dotnet 核心 API 在本地(在发布模式下)它使用 WCF 和客户端证书 (X509Certificate2) 进行外部调用,返回数据正确。但是,当此 API 部署为 Azure 应用程序服务时,它会显示 "The Client Certificate Credentials Were Not Recognized"。 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 portal中的一些设置需要相应设置导致的?
亲切的问候,
雅各
好的,经过深入研究,我发现我的 Azure 应用服务已设置为托管计划 "D1"。这意味着机器在不同的应用程序服务之间共享,因此无法使用证书存储(因为您将能够看到其他人的证书)。升级到托管计划后 "B1" 问题已解决。
当我 运行 我的 ASP dotnet 核心 API 在本地(在发布模式下)它使用 WCF 和客户端证书 (X509Certificate2) 进行外部调用,返回数据正确。但是,当此 API 部署为 Azure 应用程序服务时,它会显示 "The Client Certificate Credentials Were Not Recognized"。 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 portal中的一些设置需要相应设置导致的?
亲切的问候, 雅各
好的,经过深入研究,我发现我的 Azure 应用服务已设置为托管计划 "D1"。这意味着机器在不同的应用程序服务之间共享,因此无法使用证书存储(因为您将能够看到其他人的证书)。升级到托管计划后 "B1" 问题已解决。