WCF安全性:检查域外服务器的客户端域凭据

时间:2015-10-30 20:48:54

标签: c# wcf windows-authentication kerberos wif

我们有一个过去安装在域计算机上的WCF服务。我们的客户能够使用当前用户的域凭据连接到此服务并调用WCF方法。

这是我们使用的绑定配置:

<netTcpBinding>
    <binding ...>
        <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="None" />
            <message clientCredentialType="Windows" />
        </security>
    </binding>
</netTcpBinding>

由于某些技术原因,我们不得不将服务移至无法加入域的计算机。是否仍然可以使用WCF传输安全性进行客户端身份验证?

当客户端尝试调用WCF方法时,会出现此错误:

System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials. ---> 
System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials. ---> 
System.ComponentModel.Win32Exception: The logon attempt failed

我尝试使用runas /netonly运行服务。该更改使服务能够使用域凭据连接到后端SQL服务器,但它对尝试连接到服务的客户端没有帮助。

我做了一些关于WCF模拟,Kerberos令牌,CredSSP和其他技术的搜索和阅读,但我不确定这些中的任何一个是否有助于我的情况,我应该采取哪条路径或从哪里开始。感谢。

1 个答案:

答案 0 :(得分:1)

您需要在已加入域的服务器上运行服务才能使用Windows身份验证。您可以更改身份验证类型或将此服务移回您的域。

如果您的用户直接针对数据库进行身份验证(通过Kerberos双跃点),则从域中删除服务器的另一个后果是必须更改数据库身份验证才能使用服务帐户。