서비스에 연결을 시도하는 WinForms
데스크톱 응용 프로그램이 있습니다. 보고 서버는보고 목적으로 Active Directory 자격 증명 로그인과 특정 사용자에 대한 자격 증명을 모두 수락하도록 구성됩니다.DefaultCredentials는 웹 요청의 사용자 이름으로 "UserName"을 어디에서 가져 옵니까?
reportViewer.ServerReport.ReportServerUrl = new Uri(_dboardServices.ReportingServicesUrl);
reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = CredentialCache.DefaultCredentials;
이 내 동료 개발자의 컴퓨터에서 잘 작동하고, 고객의 대부분 : 다음 코드 섹션에서 우리는 WinForms
ReportViewer
사용합니다. 그러나 일부 클라이언트는 SoapHttpClient 시스템에서 제공되는 401 : System.Net.WebException: The request failed with HTTP status 401: Unauthorized
을 경험합니다. 흥미롭게도이 문제는 내 컴퓨터에서 재현 할 수 있습니다. Fiddler
으로 트래픽을 살펴보면 NTLM
인증이 시작되고 실제 사용자 이름 대신 사용자 이름으로 "UserName"(문자 그대로!)이 전송됩니다. 분명히 그것은 실패합니다.
올바른 사용자 이름, 암호 및 도메인 (reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);
)으로 자격 증명을 구성하면 요청이 성공합니다. 마치 SSRS
asmx
링크로 이동 한 후 내 자격 증명을 입력하는 것과 같습니다. 그러나 CredentialCache.DefaultCredentials
(내 AD 자격 증명을 기본값으로 사용해야 함)이 "UserName"을 어딘가에서 꺼냅니다. 시스템은 그것을 어디에서 가져 옵니까? 지금까지 행운을 빌리지 않고 소스 코드와 웹을 검색했습니다.
@ P.Brian.Mackey 그동안 나는 그것을 발견했으며 당신이 옳습니다. 답을 써 주시면 제가 채점하겠습니다. –
그래. 완료 –