HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”

Posted

技术标签:

【中文标题】HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”【英文标题】:The HTTP request is unauthorized with client authentication scheme 'Basic'.The authentication header received from the server was 'Basic realm=" 【发布时间】:2019-05-09 07:59:53 【问题描述】:

我正在尝试访问需要身份验证的 Soap Web 服务 (HTTP)。我正在使用 WCF 来使用该服务。我收到错误消息,因为 HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是 'Basic realm="weblogic"'。

感谢您的帮助,谢谢。

这是我的代码的样子:

var binding = new BasicHttpBinding();               
            binding.MaxBufferSize = 2147483647;

            binding.MaxReceivedMessageSize = 2147483647;
            binding.Security = new BasicHttpSecurity
            
                Mode = BasicHttpSecurityMode.TransportCredentialOnly,
                Transport = new HttpTransportSecurity()
                
                    ClientCredentialType = HttpClientCredentialType.Basic
                
            ;
            var endpoint = new System.ServiceModel.EndpointAddress(configuration["webserviceAddres"]);
            servicio = new ConsultaMontosOperadosFondosClient(binding, endpoint);
            servicio.ClientCredentials.UserName.Password = MyPass;
            servicio.ClientCredentials.UserName.UserName = MyUser;

【问题讨论】:

错误的凭据会产生相同的错误,无论领域如何。 【参考方案1】:

如果服务不是通过https,那么尝试添加领域:(我不确定它是否是weblogic,只是按照你在错误中发布的内容)

binding.Security = new BasicHttpSecurity

    Mode = BasicHttpSecurityMode.TransportCredentialOnly,
    Transport = new HttpTransportSecurity()
    
        ClientCredentialType = HttpClientCredentialType.Basic,
        Realm = "weblogic"
    
;

【讨论】:

HttpTransportSecurity() 不包含 Realm 的定义。我正在使用 netcore 2.1 @Clown123 啊,好吧,你是在使用 .net core 2.1 来生成你的代理类来调用网络服务吗? 代理类?您的意思是使用 WCF 或其他东西时生成的那个? @Clown123 是的,如果您通过命令行使用 svcutil 或在项目中添加服务引用,无论哪种方式,它都会生成用于调用服务的代理类和协定。 @Clown123 您是否验证了您使用的凭据对服务有效,这也可能导致您遇到的错误。正如您所指出的,.net core 2.1 不使用领域属性,所以这不是问题。此外,如果代理类是在不同的 .net 框架中生成的,这也可能导致此问题,但听起来您是在核心 2.1 项目中生成它们。【参考方案2】:

在 IIS 身份验证模块中启用基本身份验证,然后提供用户名/密码。

BasicHttpBinding binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
            ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient(binding, new EndpointAddress("http://10.157.13.69:8001/webservice1.asmx"));
            client.ClientCredentials.UserName.UserName = "administrator";
            client.ClientCredentials.UserName.Password = "abcd1234!";

如果问题仍然存在,请随时告诉我。

【讨论】:

以上是关于HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“协商,NTLM”

HTTP 请求未经客户端身份验证方案“匿名”授权。使用 wsdl 文件

HTTP 请求未经客户端身份验证方案“Ntlm”授权

异常 = HTTP 请求未经客户端身份验证方案“匿名”授权

客户端身份验证方案“匿名”的 HTTP 请求未经授权?

HTTP 请求未经客户端身份验证方案“协商”授权