微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HTTP请求未经客户authenticationscheme“Ntlm”

调用Web服务时,出现以下错误

HTTP请求未经客户authenticationscheme“NTLM”授权。 从服务器收到的validation头是“NTLM”。 HTTP请求未经客户authenticationscheme“NTLM”授权。 从服务器收到的validation头是“NTLM”。

我有一个调用WCF Web服务的Silverlight 4应用程序,都在我的IIS(7)上。 我的WCF Web服务使用NTLM(Windows身份validation)调用安装在其他Web服务器上的另一个ASMX Web服务。 这两个服务器,我的和ASMX Web服务的主机都在同一个域中。

当Silverlight客户端使用http://localhost/MySiteName从服务器打开应用程序时,一切正常。 但是,当Silverlight客户端使用http://MyServerName/MySiteName从不同服务器(不是服务器,但仍在同一个域中)打开应用程序时, http://MyServerName/MySiteName出现错误

移动和删除文件密码确认?

以编程方式创build和启动RDP会话(不含gui)

我可以限制进程的RAM使用情况吗?

如何关注上次激活的程序?

为什么threadpool.QueueUserWorkItem创build这么多事件句柄?

Windows身份validation在我的IIS中启用。 匿名身份validation在我的IIS中被禁用。

用于调用我的WCF Web服务的绑定configuration是:

<binding name="winAuthBasicHttpBinding"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" /> </security> </binding>

调用ASMX Web服务的绑定configuration是:

<binding name="ClNtlmBinding"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Ntlm" /> </security> </binding>

等待外部过程完成

如何模块化PowerShell脚本

Visual Basic:重新启动桌面Windowspipe理器(DWM)

WTSQuerySession@R_664_4045@ion返回一个不同的域名

TimeZoneInfo和CultureInfo的System.DateTime和Caching

好的,下面是一些想到的事情:

您大概在IIS上运行的WCF服务必须在具有调用Web服务权限的安全上下文中运行。 您需要在应用程序池中确保用户是域用户,理想情况下是专用用户

您不能使用模拟来使用用户的安全令牌使用模拟传递回ASMX,因为my WCF web service calls another ASMX web service,installed on a **different** web server

尝试将Ntlm更改为Windows并再次测试。

好的,冒充几句话。 基本上这是一个已知的问题,你不能使用你到一台服务器的模拟令牌传递给另一台服务器。 原因似乎是,令牌是一种使用用户密码的哈希,对生成的机器有效,所以不能从中间服务器使用。

UPDATE

可以在WCF下委托 (例如,将服务器的模拟转发到另一台服务器)。 在这里看这个话题。

问题发布已经很长时间了,但是在类似的情况下我遇到了同样的问题。 我有一个控制台应用程序,我正在使用Web服务,我们的IIS服务器放置了web服务,并启用了Windows身份验证(NTLM)。

我跟着这个链接,并解决了我的问题。 以下是App.config的示例代码

<system.serviceModel> <bindings> <basicHttpBinding> <binding name="Service1Soap"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm=""/> <message clientCredentialType="UserName" algorithmSuite="Default"/> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost/servicename/service1.asmx" binding="basicHttpBinding" bindingConfiguration="ListsSoap"/> </client> </system.serviceModel>

对我来说,解决方案除了使用“Ntlm”作为凭证类型外,与Jeroen K的解决方案类似。 如果我有权限级别,我会加上他的帖子,但让我发布我的整个代码,这将支持Windows和其他凭据类型,如基本身份验证:

XxxSoapClient xxxClient = new XxxSoapClient(); ApplyCredentials(userName,password,xxxClient.ClientCredentials); private static void ApplyCredentials(string userName,string password,ClientCredentials clientCredentials) { clientCredentials.UserName.UserName = userName; clientCredentials.UserName.Password = password; clientCredentials.Windows.ClientCredential.UserName = userName; clientCredentials.Windows.ClientCredential.Password = password; clientCredentials.Windows.AllowNtlm = true; clientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; }

我不得不移动域名,用户名密码

client.ClientCredentials.UserName.UserName = domain +“\”+ username; client.ClientCredentials.UserName.Password =密码

client.ClientCredentials.Windows.ClientCredential.UserName = username; client.ClientCredentials.Windows.ClientCredential.Password = password; client.ClientCredentials.Windows.ClientCredential.Domain = domain;

1)我必须做我的配置以下内容:(添加BackConnectionHostNames或禁用回送检查) http://support.microsoft.com/kb/896861

2)我正在孤立的开发网络上开发一个开发系统。 我已经使用开发系统的计算机名称在Web服务的URL中工作了,但是当我修改URL到生产中使用的URL(而不是计算机名)时,我开始得到NTLM错误

3)我注意到安全日志显示服务帐户登录失败,类似于MSDN文章中的错误

4)添加BackConnectionHostNames使得我可以通过运行在服务器上的浏览器登录到服务器,但是当尝试验证Web服务时,服务帐户仍然存在NTLM错误。 我结束了禁用循环检查,并修复了我。

也许你可以参考: http : //msdn.microsoft.com/en-us/library/ms731364.aspx我的解决方案是更改2属性authenticationScheme和proxyAuthenticationScheme为“Ntlm”,然后它的工作原理。

PS:我的环境如下 – 服务器端:.net 2.0 ASMX – 客户端:.net 4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐