访问域外的自托管WCF服务

时间:2011-09-13 14:27:20

标签: c# wcf impersonation

我们的域内的Windows服务自我托管WCF服务,使用NetTCP进行以下设置。

// Set Binding Security.
netTcpBinding.Security.Mode = SecurityMode.Transport;
netTcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
netTcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;

我们现在要求允许域外的人访问这些服务(只要他们可以提供适当的域凭据)。我们的目标不是通过IIS托管服务,只允许外部人员加入我们的服务。在我的测试中,我能够通过在WCF调用期间“模拟”客户端代理凭证来从外部连接到服务。

proxy.ClientCredentials.Windows.ClientCredential.Domain = "MyDomainName";
proxy.ClientCredentials.Windows.ClientCredential.UserName = "MyUserName";
proxy.ClientCredentials.Windows.ClientCredential.Password = "MyPassword";

我的问题是:这是正确的方法吗?有没有更好的办法?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果您需要命令性地(在代码中,例如凭据弹出窗口或从配置文件中读取)设置凭证,则此路由完全有效。更安全的选择是使用Windows凭证缓存。首先,您可以将其设置为使用缓存:

proxy.ChannelFactory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

接下来,您将在凭据缓存中设置凭据。在Windows XP / 2003中,这是在Vista / 7/2008中的“存储的用户名和密码”(在控制面板中),这是在“用户帐户>凭据管理器”下(在控制面板中)。

如上所述,您的方式完全有效 - 缓存更安全。

相关问题