gpt4 book ai didi

c# - 如何跨多个 HttpWebRequests 进行 'share' NTLM 身份验证?

转载 作者:太空狗 更新时间:2023-10-29 21:46:43 24 4
gpt4 key购买 nike

我的 C# 应用访问了使用 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

(最初,PreAuthenticate 设置为 false,后续请求看起来像第一个请求 - 即每个“请求”三个基础请求)

有没有办法通过后续的 HttpWebRequests“共享”对服务器的第一个请求执行的身份验证?

我想也许是 UnsafeAuthenticatedConnectionSharing属性将允许我执行此操作,但对于应用程序中使用的所有 HttpWebRequest 对象将其设置为 true 无效。

但是如果我设置 PreAuthenticate为真,在第一个请求之后,每个请求都会少一个 401 响应。

最佳答案

执行 NTLM 后发送的最后一个请求(产生 200 响应的请求)包含一个 auth header ,告诉服务器您拥有正确的凭据。

我不确定客户端类是否具有自己保留此 header 的功能,但如果您找到某种方法来保留此 header 并将其添加到您的后续请求中,它应该可以正常工作。


更新:NTLM 对连接进行身份验证,因此您需要使用 Keep-Alive header 保持连接打开。客户端类应该为此提供一些设置。

关于c# - 如何跨多个 HttpWebRequests 进行 'share' NTLM 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com