netTCP绑定Soap安全协商失败
我正在写一个WCF服务需要模拟和会话。
我尝试在我的本地计算机上调用它时没关系,但是在远程计算机上它总是因为这样的错误而失败:
安全支持提供程序接口(SSPI)身份validation失败。 服务器可能未在具有标识“host / hostname”的帐户中运行。 如果服务器在服务帐户(例如,网络服务)中运行,请将该帐户的ServicePrincipalName指定为服务器的EndpointAddress中的标识。 如果服务器在用户帐户中运行,请将该帐户的UserPrincipalName指定为服务器的EndpointAddress中的标识。
如果我提供了upn,它会抛出一个身份失败的exception。
这是我的配置:
服务器配置(APP):
客户端配置:
任何帮助将不胜感激。
Windows服务使用用户主体名称或服务主体名称( 文档 )注册自己。 引用该链接:“ 如果服务在LocalSystem,LocalService或NetworkService帐户下运行,则默认情况下会以host /的forms生成服务主体名称(SPN),因为这些帐户可以访问计算机的SPN数据。如果该服务在不同的帐户下运行,Windows Communication Foundation(WCF)将以@的forms生成UPN。 “实际上,此引用与您的错误消息所声明的内容非常相似。 所以似乎……
a)如果服务在本地服务帐户或类似的标准帐户下运行,则需要调整客户端配置文件以使其具有此值,其中实际服务器的名称为“address”且端点在端口4503上运行:
b)或者,如果您在专用服务帐户下运行(我们在域名“MyDomain”上将其称为“ServiceAccount”),那么您需要
请注意,您可能需要在两种情况下使用完全限定的域名,包括林和树级别。 对于私有LAN / WAN内的简单域,这将表示address.MyDomain.local和ServiceAccount@MyDomain.local。 如果您的域位于名为MyTree的树中,那么它将是ServiceAccount@MyDomain.MyTree.local; 如果它位于名为MyForest的林中,那么它将是Serviceaccount@MyDomain.MyTree.MyForest.local(和ServicePrincipalName类似)。 使用Kerberos进行身份validation时,需要完全限定名称。
还有一个肮脏的黑客,在这里 , 这里和这里发布,并在这里进行分析。
您可以提供虚拟服务主体名称(SPN)。 在这种情况下,WCF不会失败,但会回退到NTLM以进行身份validation,而不会validation主体。
所以,配置:
并以编程方式
EndpointIdentity identity = EndpointIdentity.CreateSpnIdentity("dummy");
使用ChannelFactory:
Uri uri = new Uri("net.tcp://:/myServiceAddress"); ChannelFactory channelFactory = new ChannelFactory(new NetTcpBinding()); channelFactory.CreateChannel(new EndpointAddress(uri, identity)
也会工作。
上述就是C#学习教程:netTCP绑定Soap安全协商失败分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/990310.html