正在获取当前用户的网络凭据(C#)

正在获取当前用户的网络凭据(C#),c#,web-services,authentication,C#,Web Services,Authentication,我正试图从控制台应用程序调用Web服务,我需要向客户端提供一个System.Net.NetworkCredential对象。 是否可以为启动应用程序的用户创建NetworkCredential对象而不提示输入用户名/密码?您可以使用获取用户名,但无法获取当前用户密码 如果正在调用的web服务使用windows集成安全性,则从当前的WindowsIdentity创建NetworkCredential应足以允许web服务使用当前用户的windows登录。但是,如果web服务使用不同的安全模型,则无法

我正试图从控制台应用程序调用Web服务,我需要向客户端提供一个
System.Net.NetworkCredential
对象。

是否可以为启动应用程序的用户创建
NetworkCredential
对象而不提示输入用户名/密码?

您可以使用获取用户名,但无法获取当前用户密码

如果正在调用的web服务使用windows集成安全性,则从当前的
WindowsIdentity
创建
NetworkCredential
应足以允许web服务使用当前用户的windows登录。但是,如果web服务使用不同的安全模型,则无法从当前身份提取用户密码。。。这本身就是不安全的,允许开发者窃取用户密码。您可能需要为您的用户提供某种方式来提供他们的密码,如果您不想让他们重复提供密码,则需要将其保存在安全缓存中

编辑:要获取当前标识的凭据,请使用以下命令:

Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "Basic");

我真的希望没有办法获得当前的用户密码!:)我想做的是使用“当前凭据”作为web服务的默认凭据。如何从WindowsIdentity创建网络凭据?谢谢!我刚刚使用了CredentialCache.DefaultNetworkCredentials.GetCredential方法是否从Windows XP/2003/Vista/2008中存储的用户名和密码返回凭据?我在这里问了一个相关的问题:如果GetCredential根据uri和身份验证类型从存储中检索凭据,我将得到我的答案。我将对此进行测试并报告…GetCredentials将仅返回当前登录用户的凭据,该凭据可用于使用指定的身份验证方法对给定Uri进行身份验证。据我所知,GetCredential实际上并没有从windows获取任何用户名或密码…它只是为当前windows用户创建了一个NetworkCredential实例。我在这里回答了自己的问题:我发现如果您使用新的WCF服务模型,您可以在app.config中声明性地处理身份验证,而无需在代码中弄乱凭据。有关详细信息,请参阅我的答案。