我尝试从控制台应用程序调用Web服务,需要为客户端提供一个System.Net.NetworkCredential对象。是否可以为启动应用程序的用户创建一个NetworkCredential对象而不提示输入用户名/密码?
System.Net.NetworkCredential
NetworkCredential
mi7gmzs61#
如果正在调用的Web服务使用Windows集成安全性,则从当前WindowsIdentity创建NetworkCredential应足以允许Web服务使用当前用户的Windows登录。但是,如果Web服务使用不同的安全模型,则无法从当前标识中提取用户密码...这本身是不安全的,因此您可以:开发人员可以窃取用户的密码。您可能需要为用户提供某种方式来提供他们的密码,并将其保存在某个安全的缓存中,如果您不希望他们重复提供密码的话。编辑:要获取当前标识的凭据,请使用以下命令:
WindowsIdentity
Uri uri = new Uri("http://tempuri.org/"); ICredentials credentials = CredentialCache.DefaultCredentials; NetworkCredential credential = credentials.GetCredential(uri, "Basic");
bttbmeg02#
您可以使用System.Security.Principal.WindowsIdentity.GetCurrent()获取用户名,但无法获取当前用户密码!
mrfwxfqh3#
如果您使用HttpClient,则可以通过以下方式使用它作为当前用户进行身份验证:
HttpClient
var httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
3条答案
按热度按时间mi7gmzs61#
如果正在调用的Web服务使用Windows集成安全性,则从当前
WindowsIdentity
创建NetworkCredential
应足以允许Web服务使用当前用户的Windows登录。但是,如果Web服务使用不同的安全模型,则无法从当前标识中提取用户密码...这本身是不安全的,因此您可以:开发人员可以窃取用户的密码。您可能需要为用户提供某种方式来提供他们的密码,并将其保存在某个安全的缓存中,如果您不希望他们重复提供密码的话。编辑:要获取当前标识的凭据,请使用以下命令:
bttbmeg02#
您可以使用System.Security.Principal.WindowsIdentity.GetCurrent()获取用户名,但无法获取当前用户密码!
mrfwxfqh3#
如果您使用
HttpClient
,则可以通过以下方式使用它作为当前用户进行身份验证: