微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅生产服务器针对基本身份验证生成错误“使用客户端身份验证方案'Basic'的HTTP请求未授权...”

如何解决仅生产服务器针对基本身份验证生成错误“使用客户端身份验证方案'Basic'的HTTP请求未授权...”

我们已经在多台服务器上运行了相同的代码,并且只有在生产服务器上,身份验证才会导致:

HTTP请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“ Basic realm =“ NuSOAP server””。

带有未提供数据提供者信息的当前绑定设置:


        private ***PortType.***TypeClient LogIn()
        {
BasicHttpBinding myBinding = new BasicHttpBinding();
            myBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
            myBinding.Security.Transport.ClientCredentialType =
                HttpClientCredentialType.Basic;
            myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
            myBinding.MaxBufferSize = int.MaxValue;
            myBinding.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
            myBinding.MaxReceivedMessageSize = int.MaxValue;
            myBinding.AllowCookies = true;
            myBinding.CloseTimeout = new TimeSpan(0,5,0);
            myBinding.OpenTimeout = new TimeSpan(0,0);
            myBinding.ReceiveTimeout = new TimeSpan(0,0);
            myBinding.SendTimeout = new TimeSpan(0,0);

            var portType =
                new ***TypeClient(myBinding,new EndpointAddress(***));

            portType.ClientCredentials.UserName.UserName = _login;
            portType.ClientCredentials.UserName.Password = _password;
            portType.Endpoint.EndpointBehaviors.Add(new FaultFormatingBehavior());
            return portType;
}

internal class FaultFormatingBehavior : IEndpointBehavior
        {
            public void Validate(ServiceEndpoint endpoint) { }

            public void AddBindingParameters(ServiceEndpoint endpoint,BindingParameterCollection bindingParameters) { }

            public void ApplydispatchBehavior(ServiceEndpoint endpoint,Endpointdispatcher endpointdispatcher) { }

            public void ApplyClientBehavior(ServiceEndpoint endpoint,ClientRuntime clientRuntime)
            {
                clientRuntime.ClientMessageInspectors.Add(new FaultMessageInspector());
            }
        }

public class FaultMessageInspector : IClientMessageInspector
        {
            public object BeforeSendRequest(ref Message request,IClientChannel channel)
            {
                return null;
            }

            public void AfterReceiveReply(ref Message reply,object correlationState)
            {
                if (reply.IsFault)
                {
                    var erratr = reply.GetBody<XElement>();
                    var error = erratr.Elements().Where(p => p.Name == "faultstring").FirstOrDefault()?.Value;
                    Message newFaultMessage = Message.CreateMessage(reply.Version,error,error);
                    reply = newFaultMessage;

                    throw new Exception("Remote service response returned error: " + error);
                }
            }
        }

由于必须保持兼容性,因此代码是用netcoreapp2.1编写的。 我正在寻找代码中潜在的错误,或者可能会导致这种行为的服务器设置建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。