統合Windows認証をIISと連携させるのに問題があるという報告が何千もあることは知っていますが、それらはすべて、適用されないWebページや、すでに試したソリューションにつながるようです。私は以前にこのような数十のサイトを展開したことがあるので、サーバー/構成で何か奇妙なことが起こっているか、これをあまりにも長く見ていて、明白なものを見ていません。
簡単に言えば、すべてが私のローカルマシンで完全に動作しますが、実稼働サーバーではバラバラになっており、私が知る限りまったく同じ構成です。
ローカルマシン:
リモートマシン:
最後に重要なことですが、401.2エラーに対してFREBをオンにしてみましたが、結果から何も役に立たないようです。次の警告が表示されるだけです。
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
通知2
HttpStatus 401
HttpReason Unauthorized
HttpSubStatus 2
エラーコード2147942405
ConfigExceptionInfo
通知AUTHENTICATE_REQUEST
ErrorCodeアクセスが拒否されました。 (0x80070005)
...これは私がすでに知っていることを教えているようです(資格情報をネゴシエートするのではなく、単に要求を拒否しているだけです)。
トレースは、ModuleName
= WindowsAuthentication
(およびその他のさまざまなASP.NETフォローアップイベント-[un]を含むNOTIFY_MODULE_START
行があるため、WindowsAuthenticationモジュールが正しく読み込まれていることを示しています。幸い、ここには興味深いエラーや警告はありません)。
私がここで欠けているかもしれないものを誰かに教えてもらえますか?
クイックアップデート:
IP、URL、およびその他のものを明らかにするので、Wiresharkダンプ全体を送信するのは少し不快ですが、ローカルホストとFiddlerのリモートサーバーからのHTTP応答を並べて比較しました。 -問題が何であるかを明らかにする:
Localhost:
HTTP/1.1 401 Unauthorized Cache-Control:private Content-Type:text/html; charset = utf-8 サーバー:Microsoft-IIS/7.5 WWW-Authenticate:Negotiate WWW-Authenticate:NTLM X-Powered-By:ASP。 NET 日付:2011年12月17日土曜日23:42:34 GMT 内容の長さ:6399 プロキシサポート:セッションベースの認証
リモート:
HTTP/1.1 401 Unauthorized Content-Type:text/html Server:Microsoft-IIS/7.5 X-Powered-By:ASP.NET 日付:2011年12月17日土曜日23:43:13 GMT コンテンツ長:1293
キャッシュ制御のように一見重要ではないいくつかの違いを除いて、主な違いはリモートサーバーがWWW-Authenticateヘッダーをクライアントに送信していないことです
なぜIIS Windows認証がインストールされ、ロードされ、排他的に有効になっているように見えるときにWWW-Authenticateヘッダーを送信しないのですか?
問題が解決しました。私は最終的にmoduleリストを並べて比較することにしましたが、実際には1つ欠けていました。 2つのWindows認証モジュールがあることがわかります。
サーバー上に、マネージドWindowsAuthentication
モジュールがありましたが、上記で強調表示されているネイティブWindowsAuthenticationModule
がありませんでした。そのように構成された理由は誰もが推測できることですが、明らかにネイティブモジュールがロードされていない場合、マネージモジュールは元気にロードされ、警告なしに失敗します。
したがって、この問題が発生する今後の読者は、両方のモジュールがロードされているであることを確認してください。IIS警告しませんそれらの1つが欠落している場合。
これにより、Windows認証で実行されているASP.NETサイトでローカルに作業する開発者の問題が必ずしも解決されるわけではないことがわかりました。ループバックチェックを無効にするレジストリハックが見つかりました。これはそれを修正しました:-
レジストリキー-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
「DisableLoopbackCheck」という値1のDWORDを作成します
設定を有効にするには、マシンを再起動する必要があります