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

时间:2014-01-06 15:56:00

标签: c# .net wcf authentication digest-authentication

从Windows 8.1连接客户端时,我的WCF应用程序出现问题。在过去的几天里,我一直在疯狂,并且无法深究它。这是场景:

我的WCF服务非常简单。它使用basicHttpBinding,具有TransportCredentialOnly安全模式和摘要客户端凭据类型。 (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();我得到以下例外:

例外:

  

HTTP请求未经授权使用客户端身份验证方案“Digest”。从服务器收到的身份验证标题是'Digest qop =“auth”,algorithm = MD5-sess,nonce =“+ Upgraded + v1c1d404aaeb7edbba8daf13276892331a408433c85513f482eab750b18498cb2d420b2fb99998b5b8b071a2”,charset = utf-8,realm =“Digest”'。

内部例外:

  

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

基本例外:

  

安全包中没有可用的凭据

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

非常感谢任何和所有帮助。 感谢

1 个答案:

答案 0 :(得分:1)

问题在于微软已经增强了8.1 / 2012 R2中LSAS的安全性。不再支持通过网络发送用户身份信息的BasicHttpBinding。您必须改为使用WSHttpBinding。

这解决了我的问题