我的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
是的,但現在它的工作方式有什麼問題,它將如何解決將您描述的行爲改變爲您所期望的行爲的問題,您想在現實世界中實現什麼。 –