4

서비스에 연결을 시도하는 WinForms 데스크톱 응용 프로그램이 있습니다. 보고 서버는보고 목적으로 Active Directory 자격 증명 로그인과 특정 사용자에 대한 자격 증명을 모두 수락하도록 구성됩니다.DefaultCredentials는 웹 요청의 사용자 이름으로 "UserName"을 어디에서 가져 옵니까?

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

이 내 동료 개발자의 컴퓨터에서 잘 작동하고, 고객의 대부분 : 다음 코드 섹션에서 우리는 WinFormsReportViewer 사용합니다. 그러나 일부 클라이언트는 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);)으로 자격 증명을 구성하면 요청이 성공합니다. 마치 SSRSasmx 링크로 이동 한 후 내 자격 증명을 입력하는 것과 같습니다. 그러나 CredentialCache.DefaultCredentials (내 AD 자격 증명을 기본값으로 사용해야 함)이 "UserName"을 어딘가에서 꺼냅니다. 시스템은 그것을 어디에서 가져 옵니까? 지금까지 행운을 빌리지 않고 소스 코드와 웹을 검색했습니다.

+0

@ P.Brian.Mackey 그동안 나는 그것을 발견했으며 당신이 옳습니다. 답을 써 주시면 제가 채점하겠습니다. –

+0

그래. 완료 –

답변

3

저장된 자격 증명에 문제가있을 수 있습니다. 명령 줄에서 control keymgr.dll을 실행하여 저장된 자격 증명을 확인하십시오. 이 부분은 article입니다.

+0

신비한 신임장이 신임 캐쉬에서 제거되었으므로 (놀랍습니다!) 특정 물건이 있다고 생각하지 않았으므로 확인하지 않았습니다. CredentialCache.DefaultCredentials는 동일한 호스트에 대한 자격증 명 캐시에 아무것도없는 경우에만 내 AD 자격 증명으로 기본 설정됩니다. 나는'rundll32.exe keymgr.dll, KRShowKeyMgr'를 사용하여 Credential Manager를 보여 주었고, 누군가는 제어판에서도 그것을 탐색 할 수 있습니다. –

관련 문제