当前位置: 首页 > 编程语言 > C#

在Linux机器上运行ac#app时,SOAP身份validation失败分享

时间:2023-04-10 21:46:07 C#

C#学习教程:在Linux机器上运行c#应用程序时SOAP身份验证失败在Windows机器上运行应用程序时,以下代码有效:varws=newMyWebServiceClient();ws.ClientCredentials.Windows.ClientCredential=newSystem.Net.NetworkCredential("myusername","mypassword","mydomain");varresponse=ws.SomeEndpoint();元素xmlResult=response.Result.SomeEndpoint;...但是,如果我从Linux或MacOS运行相同的代码,它会失败:HTTP请求未经授权使用客户端身份验证方案“协商”。从服务器接收到的身份验证标头是“协商,NTLM”。我有一个python应用程序,它在任何操作系统上运行时都可以毫无问题地使用相同的SOAP服务,所以问题不在于我的Linux发行版/设置。有没有人看到.NET核心有类似的问题或找到解决方法?我发现此问题报告表明早期版本的.NETCore中存在限制/错误,这些限制/错误可能会导致与我所看到的类似的行为,但它声称这些问题在RC2之后得到了修复。假设问题报告是错误的,并且问题仍然存在于具有.NET核心的Linux/Mac发行版上,有谁知道我如何获得该文章中建议的SOAP客户端的CredentialCache解决方法?我是.NET和.NETsoap客户端的新手,所以如果这是一个幼稚的问题,我深表歉意。看起来,对于非Windows,.NETCore在协商失败后无法尝试NTLM。我从一个python应用程序中知道,NTLM使用这个特定的SOAP服务。我怎样才能强制它跳过“谈判”并直接进入NTLM?从上面的文章可以看出,这是CredentialCache的解决方法。我只是想不通如何使用SOAP服务....NetCoreSOAP客户端具有NTLM身份验证和CredentialCacheBasicHttpBindingbasicHttpBinding=newBasicHttpBinding();basicHttpBinding.Security.Mode=BasicHttpSecurityMode.TransportCredentialOnly;basicHttpBinding.Security.Transport.ClientCredentialType=HttpClientCredentialType.Ntlm;EndpointAddressendpoint=newEndpointAddress("http://myservice");varfactory=newChannelFactory(basicHttpBinding,endpoint);CredentialCachemyCredentialCache=newCredentialCachedsCredentialNetworkCrered();("用户名","密码","域名");myCredentialCache.Add("ContoscoMail",45,"NTLM",myCreds);factory.Credentials.Windows.ClientCredential=myCredentialCache.GetCredential("ContosoMail",45,"NTLM");varclient=factory.CreateChannel();//...使用webservice更新:这是2.1中修复的一个错误正如这里已经遇到的和这里修复的一个错误,它应该适用于.netcore2.1(未发布并计划在2018年第一季度发布)。所以现在,您应该在从Linux连接时尝试使用不同类型的身份验证(请参阅RuntimeInformation.IsOSPlatform)。了解身份验证在Windows/控制台应用程序与Web应用程序中的工作方式很重要。问题的答案跳过协商(从服务器):转到IIS->转到站点/应用程序->选择身份验证(双击它)->您将在此处看到选项->在Windows身份验证下(如果这是已启用)然后->单击右侧仪表板中的提供商。在这里您可以上移/删除“协商”选项。以上是C#学习教程:在Linux机器上运行ac#app时,SOAP认证共享所有内容失败。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: