访问域外的SelfHosted WCF服务

本文关键字:WCF 服务 SelfHosted 访问 | 更新日期: 2023-09-27 18:08:22

我们有WCF服务是自托管的Windows服务在我们的域内,使用netttcp与以下设置。

// 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";

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

访问域外的SelfHosted WCF服务

如果你需要命令式地(在代码中,例如凭据弹出,或者从配置文件中读取)设置凭据,这个路由是完全有效的。一个更安全的选择是使用windows凭据缓存。首先,您将设置它使用缓存:

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

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

如前所述,您的方法是完全有效的-缓存只是更安全。