在NetNamedPipe服务端点的endpointaddress上设置SPN

时间:2010-09-16 17:55:08

标签: wcf netnamedpipebinding spn

我收到了“没有端点监听net.pipe:// localhost”错误,如其他地方所述,但我似乎无法找到真正的答案。

这是问题的一个很好的标识符: http://kennyw.com/indigo/102

  

使用WCF时,Windows身份验证   通过SSPI-Negotiate进行,   在大多数情况下会选择   Kerberos作为实际身份验证   机制。但是,如果是目标SPN   传递给SSPI的是一个结构良好的SPN   对于本地计算机帐户(例如   主持人/ [dns机器名])然后   谈判将使用NTLM(环回   优化)和访问令牌   将没有网络SID(和   因此可用于   NetNamedPipes)。

但它没有告诉我如何解决这个问题。我是以编程方式创建端点的。

var binding = new NetNamedPipeBinding();
binding.Security.Mode = NetNamedPipeSecurityMode.Transport;
binding.Security.Transport.ProtectionLevel = ProtectionLevel.EncryptAndSign;

var id = EndpointIdentity.CreateSpnIdentity("host/" + Environment.MachineName);
var endpointAddress = new EndpointAddress(new Uri(serviceClientUrl), id);

var client = new ServiceClient(binding, endpointAddress);

我猜我的问题出现在CreateSpnIdentity中,但我不确定要使用什么值。

其他信息: 详细说明这一点以获取更多背景信息。 Wcf服务作为在NetworkService帐户下运行的Windows服务托管(我尝试过本地系统)。该服务是使用默认的NetNamedPipeBinding构造函数创建的:

host.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "ServiceName");

我创建了一个使用此服务的SharePoint webpart。问题是,如果SharePoint站点设置为基于表单的身份验证,或者只是在Windows身份验证下的URL中使用了计算机名称,那么就没有问题。 如果在Windows身份验证下将完全限定的计算机名用于网址,我是否会收到上述错误。

我很确定这与文章中描述的NTLM Kerberos问题有关,但我不确定如何绕过它。

2 个答案:

答案 0 :(得分:3)

在客户端设置端点标识对您没有帮助,因为问题是执行客户端代码的安全上下文,而不是端点的配置。如KennyW explains,如果使用计算机的完整域名访问SharePoint应用程序,则将通过Kerberos获取Web服务器进程(在Windows身份验证下提供SharePoint用户身份)中的模拟令牌,并具有NETWORK USERS组。如果仅使用计算机名称,Kenny引用的优化会通过NTLM获取登录令牌,而NTLM不在NETWORK USERS组中,因此不会拒绝由WCF将管理器和共享内存对象放在哪个ACL上服务器发布实际管道名称的位置。

错误There was no endpoint listening at net.pipe://localhost...并不一定意味着没有WCF服务在这样的命名管道端点上进行侦听:它也可以(在这种情况下)也意味着虽然有一个,但你没有有足够的访问权限来了解它,因为您有远程登录。

答案 1 :(得分:2)

在强化之后,NamedPipe在背后变得很痛苦:http://msdn.microsoft.com/en-us/library/bb757001.aspx它实际上让我从NamedPipe更改为TCP,而我需要在同一台机器上进行通信。

现在这并不意味着这是你的问题。如果您在一个帐户下运行并尝试使用其他帐户进行连接,则通常会失败,因为命名管道不再创建为全局(除非它是LocalSys)。

我的建议是:

1)消除服务的所有安全性。毕竟,NamedPipe在同一台机器上运行,我相信通常不需要安全性。 2)尝试连接。如果失败,请使用SysInternals ProcExplorer查看已启动的对象进程。如果它有一个命名管道,那么它就是硬化。

如果您提供更多信息,我应该能够为您提供更多帮助。