Где DefaultCredentials извлекает "Имя пользователя" в качестве имени пользователя для веб-запроса?

Есть WinForms настольное приложение, которое пытается подключиться к SSRS оказание услуг. Сервер отчетов настроен на прием как учетных данных Active Directory, так и учетных данных для конкретного пользователя в целях отчетности. В следующем разделе кода мы используем WinFormsReportViewer:

reportViewer.ServerReport.ReportServerUrl = new Uri(_dboardServices.ReportingServicesUrl);
reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = CredentialCache.DefaultCredentials;

Это прекрасно работает на компьютере моего коллеги-разработчика и для большинства наших клиентов. Но некоторые клиенты испытывают 401: System.Net.WebException: The request failed with HTTP status 401: Unauthorizedисходя из системы SoapHttpClient. Интересно, что я могу воспроизвести эту проблему на моей машине. Глядя в трафик с Fiddler, NTLM начинается аутентификация, а затем "UserName" (буквально!) отправляется как имя пользователя вместо моего реального имени пользователя. Очевидно, что это не удается.

Если я создам учетные данные с правильным именем пользователя, паролем и доменом (reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);) моя просьба выполнена успешно Так же, как если бы я перейти к SSRSasmx ссылку и введите мои учетные данные. Но CredentialCache.DefaultCredentials (который должен по умолчанию использовать мои учетные данные AD) извлекает это "UserName" откуда-то. Откуда система получает это? Я безуспешно искал наш исходный код и сеть.

1 ответ

Решение

Вероятно, это проблема с сохраненными учетными данными. Посмотрите, какие учетные данные вы сохранили, запустив control keymgr.dll в командной строке. Смотрите эту статью.

Другие вопросы по тегам