私の 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 に設定すると、後続のリクエストは最初のリクエストのように見えました。つまり、「リクエスト」ごとに 3 つの基本的なリクエストです)
サーバーへの最初のリクエストで実行された認証を、後続の HttpWebRequests と「共有」する方法はありますか?
プロパティを使用するとこれが可能になるのではないかと考えUnsafeAuthenticatedConnectionSharing
ましたが、アプリで使用されるすべての HttpWebRequest オブジェクトに対して true に設定しても効果はありません。
ただし、PreAuthenticate
true に設定すると、最初のリクエストの後の各リクエストで発生する 401 レスポンスが 1 つ少なくなります。