默认凭据从哪里获取“UserName”作为Web请求的用户名?

4

有一个 WinForms 桌面应用程序,它试图连接到 SSRS 服务。报告服务器配置为接受活动目录凭据登录以及特定用户的凭据进行报告目的。在以下代码部分中,我们使用一个 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”。我已经在我们的源代码和网络上搜寻了很久,但没有找到答案。

@P.Brian.Mackey 在此期间我已经找到了答案,你是正确的。请写下答案,我会标记它。 - Csaba Toth
1个回答

3

这很可能是存储凭证的问题。在命令行中运行control keymgr.dll,查看您存储的凭证。请参阅此文章了解更多信息。


因此,神秘的凭据从凭据缓存中被提取出来了(真是个惊喜!),我没有检查它,因为我认为我在那里没有特定的东西。如果凭据缓存中没有与同一主机相关的内容,则 CredentialCache.DefaultCredentials 仅默认为我的 AD 凭据。我使用 rundll32.exe keymgr.dll, KRShowKeyMgr 来显示凭据管理器,也可以从控制面板中导航到它。 - Csaba Toth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接