Где DefaultCredentials извлекает "Имя пользователя" в качестве имени пользователя для веб-запроса?
Есть WinForms
настольное приложение, которое пытается подключиться к SSRS
оказание услуг. Сервер отчетов настроен на прием как учетных данных Active Directory, так и учетных данных для конкретного пользователя в целях отчетности. В следующем разделе кода мы используем WinForms
ReportViewer
:
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);
) моя просьба выполнена успешно Так же, как если бы я перейти к SSRS
asmx
ссылку и введите мои учетные данные. Но CredentialCache.DefaultCredentials
(который должен по умолчанию использовать мои учетные данные AD) извлекает это "UserName" откуда-то. Откуда система получает это? Я безуспешно искал наш исходный код и сеть.
1 ответ
Вероятно, это проблема с сохраненными учетными данными. Посмотрите, какие учетные данные вы сохранили, запустив control keymgr.dll
в командной строке. Смотрите эту статью.