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

  

“远程安全要求   在这期间没有实现   认证。尝试增加   ProtectionLevel和/或   ImpersonationLevel&QUOT。内心的   异常读取:“网络登录   失败"

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

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

  

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

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

如何解决错误并完成与服务器的连接? 即使这不是最佳做法,我完全可以删除任何安全性,以便我可以继续推进这个项目

有帮助吗?

解决方案

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

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

其他提示

我知道没有办法让工作组信任域名,这意味着你有几个选择,就像我看到的那样

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

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

  3. 创建域并建立信任关系。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top