1

我已经在自己的工作组中的服务器上设置了 WCF 服务。我试图从位于公司域的客户端建立一个 TCP/IP 连接。当我尝试打开连接时,我收到一条 SecurityNegotiationException 消息:

“身份验证期间未满足远程端安全要求。请尝试提高 ProtectionLevel 和/或 ImpersonationLevel。” 内部异常显示:“网络登录失败”

在与一些同事讨论了这些问题并进行了一些谷歌研究后,我得出的结论是,问题在于客户端试图使用我的公司网络登录名和密码登录到服务器。由于服务器不是公司网络的一部分,它不知道我的公司身份,然后拒绝登录/连接尝试。这种分析是否正确,我不知道。

谷歌结果似乎表明,也许解决方案是我需要模拟服务器计算机上存在的用户帐户。--我还偶然发现了这篇演示用户模拟的代码项目文章。由于服务器上唯一的帐户是没有密码的管理员,我尝试将域作为计算机的 IP 地址为“10.0.0.11”,用户名为“管理员”,密码为“”。 http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx?display=Print 不幸的是,它失败并显示以下消息:

“登录失败:未知用户名或密码错误”

问题的另一个提示:当客户端和服务器都是公司网络上的机器时,根本不存在连接问题。

如何解决错误并完成与服务器的连接?尽管这不是最佳实践,但我完全可以移除任何安全措施,这样我就可以继续推进这个项目

4

2 回答 2

2

在您掌握细节之前,最好的学习方法是禁用安全性。您必须在服务器端创建一个新的绑定配置,并将安全模式设置为“无”。为方便起见,将其命名为“NoSecurity”。此配置必须具有您在端点使用的相同类型(wsHttpBinding 等)。然后将端点的 bindingConfiguration 属性设置为“NoSecurity”。

更新您的客户端配置,您就可以开始了。

于 2009-03-08T10:54:44.670 回答
1

我知道没有办法让工作组信任一个域,这意味着你有几个选择,正如我所看到的

  1. 在使用 HTTP(Web 服务端点)的 WCF 服务中添加另一个端点,并从域中使用它。这解决了安全问题,因为您可以在此处模拟,甚至设置可以访问工作组服务器中的好东西的特定用户。

  2. 破坏 WCF 服务中的安全性。我将不得不考虑如何做到这一点,但无论如何这不是一个好主意。

  3. 创建域并获得信任关系。

您提到的代码项目并没有以对 WCF 直接有用的方式处理模拟,因为身份验证发生在您甚至可以点击此代码之前。我想你可以敲击框架位来做到这一点,但这会很讨厌。可能有一种方法可以在 HTTP 端点中使用代码,但这已经可以完成,而不会产生添加绕过 Windows 安全性的代码的开销。

于 2009-03-07T03:57:08.363 回答