如何在Windows身份验证中传递默认凭据

时间:2016-03-21 08:41:39

标签: c# win-universal-app windows-10-universal

我正在使用C#.net开发UWP应用程序,它具有启用Windows身份验证的WCF服务。在使用添加服务引用选项使用服务调用后,我很难通过默认的NetworkCredential。

请在下面查看我的考试。

当我传递正确的Windows身份验证凭据时,它正在按预期工作。

var service = new ServiceReference.Service1Client();
service.ClientCredentials.Windows.ClientCredential =new NetworkCredential("pradeep","****");
var test = await service.GetDataAsync(1);

但是,我想在使用我的服务时传递默认网络凭据

var service = new ServiceReference.Service1Client();
service.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
var test = await service.GetDataAsync(1);

我也试过以下选项。

service.ClientCredentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;

当我传递默认凭据时。我超越了例外。

  

HTTP请求未经授权使用客户端身份验证方案   '协商&#39 ;.从服务器收到的身份验证标头是   '谈判,NTLM'。

我在WPF应用程序中使用默认的NetworkCredential测试了相同的服务调用,该应用程序按预期工作。

1 个答案:

答案 0 :(得分:6)

要使用 System.Net.CredentialCache.DefaultNetworkCredentials 在UWP中传递WCF Windows身份验证的默认凭据,请首先确保已添加企业身份验证< / strong>和专用网络(客户端和服务器)功能如下:

enter image description here

对于企业身份验证功能,这是因为Windows域凭据允许用户使用其凭据登录远程资源,并且就像用户提供了用户名和密码一样。企业身份验证特殊功能通常用于连接到企业内服务器的业务线应用程序。

对于专用网络(客户端和服务器)功能,因为目前在Windows运行时我们只能传递Intranet中的默认凭据。对于互联网,我们必须使用用户名和密码作为凭证。

有关功能的更多信息,请检查: https://msdn.microsoft.com/en-us/library/windows/apps/hh464936.aspx

之后,请尝试使用计算机名称完全限定的计算机名称,而不是使用WCF服务的IP地址,如下所示:http://YourComputerName:YourPortNumber/Service1.svc。< / p>

最后请使用另一台计算机作为客户端,使用 System.Net.CredentialCache.DefaultNetworkCredentials 在UWP中测试WCF Windows身份验证,然后它应该可以正常工作。

感谢。