1

我试图使用 NTLM 身份验证方案连接到 WCF SOAP 服务,我在使用 .Net Framework 4.x 时成功了,但是当我尝试在 .NET Core 2.1 中使用相同的服务时它失败了(因为发送了身份验证方案尽管我在代码中设置了 Ntlm 作为协商),但我正在使用 fiddler 并且我正在附上它的一些图片。

Net Framework 4.x 的标头 Net Framework 4.x 的标头

Net Core 2.1 的标头

Net Core 2.1 的标头

这是我正在使用 .NetCore2.1 和 .NetFramework 4.5.x 的源代码(其中工作正常):

System.ServiceModel.Channels.CustomBinding binding = new System.ServiceModel.Channels.CustomBinding();
System.ServiceModel.Channels.TextMessageEncodingBindingElement textBindingElement = new System.ServiceModel.Channels.TextMessageEncodingBindingElement();
binding.Elements.Add(textBindingElement);
System.ServiceModel.Channels.HttpsTransportBindingElement httpsBindingElement = new System.ServiceModel.Channels.HttpsTransportBindingElement();
httpsBindingElement.AllowCookies = true;
httpsBindingElement.MaxBufferSize = int.MaxValue;
httpsBindingElement.MaxReceivedMessageSize = int.MaxValue;
httpsBindingElement.AuthenticationScheme = System.Net.AuthenticationSchemes.Ntlm;
binding.Elements.Add(httpsBindingElement);
return binding;

_client.ClientCredentials.Windows.ClientCredential.Domain = "domain";
_client.ClientCredentials.Windows.ClientCredential.UserName = "username";
_client.ClientCredentials.Windows.ClientCredential.Password = "password";
_client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

我在 .NetCore2.1 中遇到的错误是:

发生一个或多个错误。(HTTP 请求未经客户端身份验证方案“Ntlm”授权。从服务器接收到的身份验证标头为“NTLM,Negotiate”。)

任何帮助将不胜感激,谢谢!

4

1 回答 1

0

请检查这个线程。线程包含几个解决方法:

// https://github.com/dotnet/wcf/issues/2923#issuecomment-408341667
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

// https://github.com/dotnet/wcf/issues/2923
ConnectionClose = false
ExpectContinue = false
于 2019-09-20T02:07:00.003 回答