Я перевожу клиента 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
, за которой следуют некоторые двоичные данные