我的C#应用程序访问使用NTLM身份验证的Web服务器。如何跨多个HttpWebRequest共享NTLM认证?
我发现每个向服务器发出的请求(使用新的HttpWebRequest)都是单独验证的。换句话说,每个请求都会产生一个401响应,然后在我得到实际响应之前发生NTLM握手对话。
如:
第一GET请求:
-> GET xyz
<- 401 error (WWW-Authenticate:NTLM)
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM base64stuff)
-> GET xyz (Authorization: base64stuff)
<- 200
后续请求:
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM) //can this request be avoided?
-> GET xyz (Authorization: base64stuff)
<- 200
(最初,与预先验证设置为false,后续请求看起来像第一个请求 - 即每个“请求”有三个底层请求)
是否有用后续的HttpWebRequests将第一个请求上执行的认证“共享”到服务器的方式?
我想也许UnsafeAuthenticatedConnectionSharing
属性将允许我这样做,但将其设置为true对于应用程序中使用的所有HttpWebRequest对象都没有影响。
但是,如果我将PreAuthenticate
设置为true,则会在第一个请求之后发生一次少于401次的响应。
什么问题是你想解决? –
我想有效'做认证'一次,并跨HttpWebRequests重复使用。而不是每次我点击服务器时进行身份验证。尽管我可能会误解NTLM,实际上NTLM会对每个请求额外请求开销。 – mackenir
是的,但现在它的工作方式有什么问题,它将如何解决将您描述的行为改变为您所期望的行为的问题,您想在现实世界中实现什么。 –