.Net Core WCF Client - NTLM Auth - 401 - PullRequest
       12

.Net Core WCF Client - NTLM Auth - 401

0 голосов
/ 06 ноября 2019

Я перевожу клиента SSRS WCF из .Net Framework в .Net Standard, используя эту статью https://blogs.msdn.microsoft.com/dataaccesstechnologies/2017/09/19/reporting-services-web-services-with-net-core-2/

Предыдущая версия инициализации клиента выглядит следующим образом:

var client = new ReportExecutionService
{
    Url = url,
    Credentials = new NetworkCredential(username, password, domain)
});

и здеськод новой версии:

var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
var endpointAddress = new EndpointAddress(url);
var client = new ReportExecutionServiceSoapClient(basicHttpBinding, endpointAddress);
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(username, password, domain);

Новый клиент не работает с ошибкой 401. Я проверил запросы с использованием Fiddler, оба имеют одинаковый формат токена аутентификации:

Authorization: NTLM long_base64_string

Но значение отличается. NetworkCredential инициализируется с теми же значениями. Что может быть причиной разных токенов? Есть ли способ декодировать эти токены, чтобы проверить, что на самом деле отправляется в обоих случаях? Обычное декодирование base64 дает мне строку, которая начинается с NTLMSSP, за которой следуют некоторые двоичные данные

1 Ответ

0 голосов
/ 07 ноября 2019

Окончательно разрешается установкой AllowedImpersonationLevel:

client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
...