DefaultCredentials在哪里提取“UserName”作为Web请求的用户名?

时间:2013-11-01 16:48:27

标签: c# winforms reporting-services defaultnetworkcredentials credentialscache

有一个WinForms桌面应用程序尝试连接到SSRS服务。报表服务器配置为接受Active Directory凭据登录以及特定用户的凭据以进行报告。在以下代码部分中,我们使用WinForms ReportViewer

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身份验证,然后以用户名而不是我的真实用户名发送“UserName”(字面意思!)。显然失败了。

如果我使用正确的用户名,密码和域(reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);)构建凭证,我的请求就会成功。就像我导航到SSRS asmx链接并输入我的凭据一样。但是CredentialCache.DefaultCredentials(默认为我的AD凭据)从某个地方拉出这个“UserName”。系统从哪里获得?到目前为止,我搜索了我们的源代码和网页,但没有运气。

1 个答案:

答案 0 :(得分:3)

存储凭据可能存在问题。通过在命令行运行control keymgr.dll来查看已存储的凭据。请参阅此article