web-dev-qa-db-ja.com

NTLMを使用して各要求の401応答を回避する

ここでは、NTLMベースのWindows認証を使用するasp.net 3.5アプリケーションがあります。システムは、(VPN経由で接続された)さまざまな地理的場所に実際に分散されたプライベートネットワーク上で実行されます。

現在、ウェブサイトのパフォーマンスを最適化しようとしています。 NTLMが機能するため、IISへのすべての新しい要求は3つの異なる要求で構成されますが、最初の2つは401の応答です。これらの要求の量を最小限に抑えて、セッションの開始 this ソリューションが見つかりました。残念ながらそれは何も変更せず、この401応答(これは時間を消費します)を取得し続けます。

トラフィックを確認するために、私は最初にFiddlerアプリを使用しました。どういうわけか、私がFiddlerを使用する場合、セッションの開始時に認証プロセスは1つしかありません(希望どおり)が、Fiddlerを閉じてWireShark経由でトラフィックを確認すると、要求ごとにこの401応答が残っていることがわかります。

使用されているクライアントはIE6、IISバージョン6です。

誰かがアドバイスできますか?

28
Satumba

NTLM /ネゴシエートは、他のすべてのHTTP認証方式とは異なり、接続指向のプロトコルです。

IISには、以前に認証された接続(AuthPersistSingleRequestなど)でのすべての要求に対して認証が要求されるかどうかを制御するさまざまな設定があります。その設定とは関係なく、IISはPOSTリクエストを行うときに自動的に再認証を要求するでしょう。

サーバーが接続の再利用を妨げている場合(応答でConnection:closeヘッダーを送信するなど)、それを修正する必要があります。そうしないと、再認証が発生します。 Fiddlerを使用すると、このような認証再利用の失敗ヘッダーを簡単に確認できます。

19
EricLaw

唯一の方法は、ログインページでのみNTLMを使用し、 here のようなcookieを使用することです。

4

関連トピックについて; IIS7.0とkerberos認証を使用している場合は、AuthPersistNonNTLM = trueを使用して、各要求の401ラウンドトリップを回避できるようです。

http://msdn.Microsoft.com/en-us/library/aa347548(VS.90).aspx

http://blogs.technet.com/b/configurationmgr/archive/2010/06/03/solution-you-may-experience-slow-performance-when-using-bits-and-kerberos-authentication- on-configmgr-2007-distribution-points.aspx

3
dparnas

ドメインでこれを試しましたか?

setspn -a FQDNServerName applicationPoolServiceAccount
setspn -a biosServerName applicationPoolServiceAccount

これにより、アプリケーションプールはNTLM認証要求を処理できます。

3
cfburns

サイトのIE6のセキュリティ設定である可能性があります。ローカルイントラネットまたは信頼済みサイトに変更してみてください。

2
Shiraz Bhaiji

私はまったく同じ問題を抱えています!私はあなたと同じ環境を使用しています。フィドラーでも2 401が表示されることを除いて。私はその問題に数日を費やして、それからそれをあきらめました。 AuthPersistenceも機能しませんでした。しかし、ここに私が見つけたリンクがあります。おそらくそれらはあなたのケースでうまくいくでしょう。

http://msdn.Microsoft.com/en-us/library/ms525244.aspx

http://www.Microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

http://technet.Microsoft.com/en-us/library/cc786094.aspx

http://technet.Microsoft.com/en-us/library/cc781339(WS.10).aspx

フラグを仮想ディレクトリとWebサイトの両方のレベルで設定しようとしましたが、役に立ちませんでした。 IIS Metabase Explorerを使用してこれらのプロパティを編集していますか?プロパティを編集するためのよりすっきりした方法であり、XMLファイルを直接編集する以外にも役立つ場合があります。

この問題を回避する1つの方法は、どのページでも頻繁に変更されないリソースのHTTP応答にCache-Controlヘッダーを挿入することです。私の場合、CSS(これを最適化するためにできるだけ外部のCSSを使用します)、JS、およびimgファイルをキャッシュしました。私のホームページに読み込まれるこれらのタイプのファイルは約60個あるため、約120 401個のエラーをすぐに解消できました。

ファイルがキャッシュされている場合でも401と304が引き続き生成される場合は、if-modifiedまたはe-tagベースのキャッシュではなく、必ずCache-Controlヘッダーを使用してください。

1
Punit Vora

私にとっても、これを引き起こしたのは主にJSとCSSファイルであったことを除いて、私もこの問題を抱えていました。私のサイト(ほとんどのサイトと同様)は、JSファイルとCSSファイルを独自のディレクトリに保持しています。したがって、私にとっての解決策は、IIS)のディレクトリに移動してAnon Authを有効にすることでした(簡単に言うと、これを解決するのに2年以上かかりました。この投稿のおかげです)。現在、サイトではWindows認証が必要ですが、JSおよびCSSファイルのサブディレクトリは必要ありません。

また、機密情報をJSファイル(またはCSSファイル)に保存することはありません。また、保存しないことをお勧めします。その場合、これらのファイル内の機密情報をこれらのディレクトリから移動する必要があることは明らかです。

0
krowe2