如何解决“客户端身份验证方案'Anonymous'禁止HTTP请求”

时间:2019-12-11 16:46:10

标签: c# .net wcf asp.net-core

在实现与WCF服务对话的客户端时遇到一些问题。这是另一家公司托管的WCF,因此我无法访问其代码。我使用Visual Studio中的Connected Service提供程序工具生成客户端代码,以便可以发出请求,并且在本地计算机上一切正常。我在开发环境中遇到问题,如果尝试与客户提出请求,则会收到以下错误:

The HTTP request was forbidden with client authentication scheme 'Anonymous'

我一直在查看由提供程序工具生成的客户端代码(很多代码),我认为它可能与以下代码块有关。

System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
return result;

4 个答案:

答案 0 :(得分:3)

这更多地与公司网络中的防火墙规则相关。

我使用非授权代理存在相同的问题,但是使用ntlm ClientCredentialType解决了安全代理问题

答案 1 :(得分:0)

result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;

使用HTTPS提供安全性。该服务必须配置有SSL证书。 SOAP消息使用HTTPS进行整体保护。客户端使用服务的SSL证书对服务进行身份验证。客户端身份验证是通过ClientCredentialType控制的。

https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.basichttpsecuritymode?view=netframework-4.8

答案 2 :(得分:0)

此错误通常表示WCF服务器使用证书对客户端进行身份验证。当服务器与客户端之间的信任关系尚未建立时,将发生此错误。
enter image description here
通常,我们需要提供要由服务器进行身份验证的客户端凭据,以便能够调用该服务。至于需要提供哪种凭据,则取决于服务器端的绑定信息。

 BasicHttpBinding binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

即,上述错误表明服务器使用证书对客户端进行了身份验证。

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

关于使用证书对客户端进行身份验证,您可以参考下面的链接以获取详细信息。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-certificate-authentication
随时让我知道是否有什么可以帮助您的。

答案 3 :(得分:0)

感谢所有建议。这实际上是由我们组织内设置的防火墙规则引起的。将其删除后,代码即可按预期工作。