我需要调用在 Windows 域中运行的 Web 服务,该域与运行(Windows 窗体)客户端的域不同。Web 服务使用 Windows 身份验证进行保护。
Web 服务域的域凭据保存在客户端的用户配置文件中(在 XP 中保存用户名和密码),但我一直无法弄清楚在调用 Web 服务时如何使用这些保存的凭据。我发现了很多使用
的例子WebService1.Credentials = System.Net.CredentialCache.DefaultCredentials
(这不起作用,因为它是本地域的凭据)
或
WebService1.Credentials = new NetworkCredentials(username, pwd, domain)
(如果用户名、密码、域是硬编码的)。
我已经阅读了有关使用 Windows API 使用 CredEnumerate
和 CredRead
的内容,但不知道如何(或是否)我可以转换 PCREDENTIAL
到托管 NetworkCredential
(ReadCred
不会返回存储的域凭据的密码)
SO 上有人知道怎么做吗?
谢谢!
最佳答案
我不相信你可以直接使用它们。我相信您必须提示用户输入它们,然后一旦用户提供它们,您就可以再次提示。 Here is an article on how to do that .毕竟,如果您只能从 DPAPI 获取凭据,那将达不到目的。 :)
这是一些信息。万一有帮助...
在 DPAPI 中保存数据的管理器称为 Key Manager .您可以通过执行开始->运行...从 UI 访问 key 管理器。
rundll32.exe keymgr.dll, KRShowKeyMgr
一般而言,存储身份验证函数的API是ADVAPI32。 .您也许可以在其中找到可以帮助您的东西。这是一个 decent article在那个 API 上。
当您将凭据添加到 CredentialCache 时,您还可以尝试 authType "Negotiate"作为described here .
抱歉,这只是一个研究转储——我没有找到答案,但希望其中的一些可以帮助你。 GL.
关于.net - 如何使用存储的凭据调用 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994232/