我的 C# 应用程序访问了使用 NTLM 身份验证的 Web 服务器。
我发现向服务器发出的每个请求(使用新的 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
(最初,PreAuthenticate 设置为 false,后续请求看起来像第一个请求 - 即每个“请求”三个底层请求)
有没有办法与后续的 HttpWebRequests“共享”对服务器的第一个请求执行的身份验证?
我想也许该UnsafeAuthenticatedConnectionSharing
属性会允许我这样做,但是对于应用程序中使用的所有 HttpWebRequest 对象将其设置为 true 无效。
但是,如果我设置PreAuthenticate
为 true,则在第一个请求之后的每个请求都会发生一个 401 响应。