4

有一個WinForms桌面應用程序,它試圖連接到SSRS服務。報表服務器被配置爲接受Active Directory憑證登錄以及用於報告目的的特定用戶的憑證。在下面的代碼部分,我們使用WinFormsReportViewerDefaultCredentials在哪裏將「UserName」作爲Web請求的用戶名?

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

這工作我的同事開發的機器上很好,而且我們的大多數客戶。但有些客戶端遇到來自SoapHttpClient系統的401:System.Net.WebException: The request failed with HTTP status 401: Unauthorized。有趣的是,我可以在我的機器上重現此問題。通過Fiddler來查看流量,開始NTLM身份驗證,然後將「用戶名」(字面上!)作爲用戶名而不是我的真實用戶名發送。顯然這失敗了。

如果我使用正確的用戶名,密碼和域名(reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);)構建證書,我的請求會成功。就好像我導航到SSRSasmx鏈接並鍵入我的憑證。但CredentialCache.DefaultCredentials(它應該默認爲我的AD憑據)從某處拉出這個「用戶名」。系統從哪裏獲得?到目前爲止,我沒有運氣搜索過我們的源代碼和網頁。

+0

@ P.Brian.Mackey在此期間,我發現了它,你是對的。請寫一個答案,我會標記它。 –

+0

當然可以。完成 –

回答

3

這可能是存儲憑據的問題。通過在命令行運行control keymgr.dll來查看您存儲了哪些憑據。看到這個article

+0

所以這個神祕的證書被從證書緩存中取出(真是一個驚喜!),我沒有檢查過,因爲我沒有想到我在那裏有特定的東西。如果相同主機的憑證緩存中沒有任何內容,則「CredentialCache.DefaultCredentials」僅默認爲我的AD憑據。我使用'rundll32.exe keymgr.dll,KRShowKeyMgr'來顯示Credential Manager,有人可以從控制面板導航到它。 –