Web services 通过NTLM授权不起作用的代理请求具有基本授权的web服务

Web services 通过NTLM授权不起作用的代理请求具有基本授权的web服务,web-services,proxy,ntlm,basic-authentication,wcf,Web Services,Proxy,Ntlm,Basic Authentication,Wcf,我有一个需要基本授权的web服务和一个需要NTLM授权的internet代理背后的用户。我还有一个表单应用程序,它调用web服务并向用户请求web服务凭据(与NTLM凭据不同) 我让应用程序配置工作(WCF ServiceModel),它使用默认代理凭据,请求正在使用代理进行身份验证,但在使用web服务进行身份验证后,由于某种原因,它不会发送请求正文 如果我在没有NTLM代理的情况下进行本地测试,则该过程可以工作。很抱歉有这么长的例子,但我必须包括它们 第一次请求: 发送: 第二次请求: 发送:

我有一个需要基本授权的web服务和一个需要NTLM授权的internet代理背后的用户。我还有一个表单应用程序,它调用web服务并向用户请求web服务凭据(与NTLM凭据不同)

我让应用程序配置工作(WCF ServiceModel),它使用默认代理凭据,请求正在使用代理进行身份验证,但在使用web服务进行身份验证后,由于某种原因,它不会发送请求正文

如果我在没有NTLM代理的情况下进行本地测试,则该过程可以工作。很抱歉有这么长的例子,但我必须包括它们

第一次请求:

发送:

第二次请求:

发送:

收到:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: NTLM
Proxy-Authenticate: BASIC realm="corporaterealm"
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: close
Set-Cookie: BCSI-CS-36204A5A7BBD24D9=2; Path=/
Connection: close
Content-Length: 1057
Proxy-Support: Session-Based-Authentication

[...]
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAEAAQADgAAAAFgomiysOwieqrhFEAAAAAAAAAALIAsgBIAAAABQLODgAAAA9DAE8ATQBFAFQATgBFAFQAAgAQAEMATwBNAEUAVABOAEUAVAABABoAVgBJAC0AUgBJAEMASwBEAEMALQAwADAAMQAEABwAYwBvAG0AZQB0AG4AZQB0AC4AbABvAGMAYQBsAAMAOABWAEkALQBSAEkAQwBLAEQAQwAtADAAMAAxAC4AYwBvAG0AZQB0AG4AZQB0AC4AbABvAGMAYQBsAAUAHABjAG8AbQBlAHQAbgBlAHQALgBsAG8AYwBhAGwAAAAAAA==
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: Keep-Alive
Set-Cookie: BCSI-CS-36204A5A7BBD24D9=2; Path=/
Connection: Keep-Alive
Content-Length: 1074
Proxy-Support: Session-Based-Authentication

[...]
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="myrealm"
X-Powered-By: ASP.NET
Date: Tue, 31 May 2011 13:09:33 GMT
Cache-Control: proxy-revalidate
Content-Length: 1656
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Proxy-support: Session-based-authentication
Age: 0

[...]
HTTP/1.1 400 Bad Request
Date: Tue, 31 May 2011 13:09:33 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private, proxy-revalidate
Content-Length: 0
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0
HTTP/1.1 401 Unauthorized
Content-Length: 1656
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="myrealm"
X-Powered-By: ASP.NET
Date: Tue, 31 May 2011 13:31:46 GMT

[...]
HTTP/1.1 200 OK
Date: Tue, 31 May 2011 13:31:47 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=svv4i11awg05v1j5viz1impo; path=/; HttpOnly
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 5127

[...]
第三次请求:

发送:

第四个请求:

发送:

收到:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: NTLM
Proxy-Authenticate: BASIC realm="corporaterealm"
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: close
Set-Cookie: BCSI-CS-36204A5A7BBD24D9=2; Path=/
Connection: close
Content-Length: 1057
Proxy-Support: Session-Based-Authentication

[...]
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAEAAQADgAAAAFgomiysOwieqrhFEAAAAAAAAAALIAsgBIAAAABQLODgAAAA9DAE8ATQBFAFQATgBFAFQAAgAQAEMATwBNAEUAVABOAEUAVAABABoAVgBJAC0AUgBJAEMASwBEAEMALQAwADAAMQAEABwAYwBvAG0AZQB0AG4AZQB0AC4AbABvAGMAYQBsAAMAOABWAEkALQBSAEkAQwBLAEQAQwAtADAAMAAxAC4AYwBvAG0AZQB0AG4AZQB0AC4AbABvAGMAYQBsAAUAHABjAG8AbQBlAHQAbgBlAHQALgBsAG8AYwBhAGwAAAAAAA==
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: Keep-Alive
Set-Cookie: BCSI-CS-36204A5A7BBD24D9=2; Path=/
Connection: Keep-Alive
Content-Length: 1074
Proxy-Support: Session-Based-Authentication

[...]
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="myrealm"
X-Powered-By: ASP.NET
Date: Tue, 31 May 2011 13:09:33 GMT
Cache-Control: proxy-revalidate
Content-Length: 1656
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Proxy-support: Session-based-authentication
Age: 0

[...]
HTTP/1.1 400 Bad Request
Date: Tue, 31 May 2011 13:09:33 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private, proxy-revalidate
Content-Length: 0
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0
HTTP/1.1 401 Unauthorized
Content-Length: 1656
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Basic realm="myrealm"
X-Powered-By: ASP.NET
Date: Tue, 31 May 2011 13:31:46 GMT

[...]
HTTP/1.1 200 OK
Date: Tue, 31 May 2011 13:31:47 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=svv4i11awg05v1j5viz1impo; path=/; HttpOnly
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 5127

[...]
我不明白为什么它在第四次请求中没有发送信封。两次握手都完成了,所以理论上一切都应该很好

当我在没有NTLM代理的情况下在本地执行此操作时,信封将按预期发送:

第一次请求:

发送:

第二次请求:

发送:


我必须更改服务器安全配置以接受摘要身份验证。由于某些原因,Basic无法正常工作。

我遇到了一个潜在的类似问题,我认为这可能与建立到代理的原始NTLM连接有关

根据我的经验,每小时有三个请求按顺序发出,并配置了重试

在这些请求中,有两个可以工作,一个会以400失败,然后当第一次重试时,它也可以工作

IE也存在一个类似的问题:

我运行了一些网络跟踪并观察了这些行为,注意到TCP流似乎经常被共享,因此其中一个请求最终会在另一个已经通过身份验证后向代理发送NTLM身份验证消息(零内容长度)。在这种情况下,代理只是通过零内容消息(因为流已经通过了身份验证)

对我来说,修复它的方法是移动到WCF自定义
customBinding
(使用
textMessageEncoding
messageVersion
Soap11
来维护我的
basicHttpBinding
行为)和(如果需要,不确定)将
keepAliveEnabled
设置为false


不幸的是,我怀疑这对您的特殊情况会有多大帮助,但更多的信息不会有什么坏处。

您用来发送这些请求的客户端库是什么?有些请求看起来。。。异常:例如,将expect:continue标头与POST数据一起发送。我使用的是.NET WCF服务引用。有一个Sytem.ServiceModel对象。这比我在.Net中使用NTLM得到的要远,你能回答吗?@Keith:你的问题不同。我不必编写自己的NTLM代码,因为WCF服务绑定器可以处理这个问题。这是我的配置:。无论如何,感谢您查看