提问者:小点点

Windows 8.1 WCF客户端无法通过BasicHttpBind通过摘要身份验证连接到服务


从Windows 8.1连接客户端时,我的WCF应用程序出现问题。在过去的几天里,我一直为此疯狂,无法深入了解它。情况如下:

我的WCF服务相当简单。它使用basicHttpBind,具有TransportCretionalOnly安全模式和摘要客户端凭据类型。(web. config文件在这里:http://pastebin.com/LsWmcfTs)。它是这样做的,因为我需要服务器端的windows标识。

我的客户端是一个控制台应用程序,当它尝试调用我的服务中的“ping”方法时发生故障(它只是返回文本“Pong”)用于连接到服务的代码如下:

var basicBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;

var client = new TestExecutionEngineClient(basicBinding, new EndpointAddress(uri));

client.Open();

client.Ping();

这已经在所有连接客户端上工作了一年多,除了Windows 8.1,也就是说,它从未工作过。

当它命中client.Ping()时;我得到下面的异常:

例外:

使用客户端身份验证方案'Digest',HTTP请求未经授权。从服务器收到的身份验证标头是'Digest qop="auth",算法=MD5-sess, nonce="升级的v1c1d404aaeb7edbba8daf132fe97aa12243033a0f40acf01376892331a408411c85513f482eab750b18498cb2d420b2fb998b5b8b071a2",charset=utf-8,领域="Digest"'。

内部异常:

远程服务器返回错误:(401)未经授权。

基本例外:

安全包中没有可用凭据

据我所知,看起来服务器端正在请求摘要(正确)并且客户端正在摘要中进行身份验证,但它不会接受它……

任何帮助都将不胜感激谢谢


共1个答案

匿名用户

问题是Microsoft在8.1/2012 R2中增强了LSAS中的安全性。不再支持通过网络发送用户身份信息的BasicHttpBind。您必须改用WSHttpBind。

这解决了我的问题