【问题标题】:Problem Connecting to WCF Service on a Server连接到服务器上的 WCF 服务时出现问题
【发布时间】:2010-10-11 21:27:52
【问题描述】:

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

“远程端安全要求 期间没有兑现 验证。尝试增加 保护等级和/或 ImpersonationLevel。” 内部 异常显示:“网络登录 失败”

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

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

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

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

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

【问题讨论】:

    标签: c# .net wcf security impersonation


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 或者可以将工作组的证书提供给域中的 WCF 服务以执行身份验证?
    • 一些非常好的建议。我很擅长破坏/禁用安全性;这是一个完全内部的网络,虽然这不是最佳实践,但我想让这个公园尽快运作。如何禁用安全性以便我可以完成此操作?
    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多