Получение проверки подлинности Согласование вместо NTLM при использовании службы SOAP WCF в Net.Core 2.1 - PullRequest
1 голос
/ 19 сентября 2019

Я пытался подключиться к службе WCF SOAP с использованием схемы аутентификации NTLM, мне это удалось при использовании .Net Framework 4.x, но при попытке использовать ту же службу в .NET Core 2.1 происходит сбой (потому что аутентификациясхема отправляется как Negotiate, несмотря на то, что я установил Ntlm в коде), я использовал fiddler, и я прилагаю некоторые его изображения.

Net Framework 4.x's Header Net Framework 4.x's Header

Net Core 2.1's Headers

Заголовки 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, переговоры'.)

Любая помощь будет очень признательна, спасибо!.

1 Ответ

0 голосов
/ 20 сентября 2019

Пожалуйста, отметьте эту тему .Тема содержит несколько обходных путей:

// 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
...