从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)未经授权。
基本例外:
安全包中没有可用的凭据
据我所知,看起来服务器端正在请求摘要(正确),客户端正在使用摘要进行身份验证,但它不会接受它.......
非常感谢任何和所有帮助。 感谢
答案 0 :(得分:1)
问题在于微软已经增强了8.1 / 2012 R2中LSAS的安全性。不再支持通过网络发送用户身份信息的BasicHttpBinding。您必须改为使用WSHttpBinding。
这解决了我的问题