Windows 認証 Web アプリで、突然認証ダイアログが出るようになる問題について

こんにちは d99 です。
弊社の会計年度は7月始まりなので、実は今日から新年度です。今年もよろしくお願いします。前回予告したように、今回も最近お問い合わせの多い事例について取り上げます。

現象は、Windows Server 2008 R2 (Windows 7) 上で動作している、Windows 認証を使用した Web アプリケーションで、今まで問題なく動作していたにも関わらず、急に認証ダイアログが表示されるようになる、というものです。

認証ダイアログが表示される原因は多岐にわたるため確認すべき内容が多く、一般的には調査に時間がかかる事で知られています。しかし、Windows Server 2008 R2 では、下記の既知の不具合があり、これによって突然認証ダイアログが表示される現象が発生します。この不具合は 2011 年 8 月に公開されましたが、昨今、世界的にお問い合わせが増加しています。

Users cannot access an IIS-hosted website after the computer password for the server is changed in Windows 7 or in Windows Server 2008 R2
https://support.microsoft.com/kb/2545850/en-us

現象の特徴

この現象をクライアント側から見てみましょう。

この現象はクライアントで認証ダイアログが表示される現象として表面化します。さらに、表示された認証ダイアログに正しいアカウント情報を入力しても、認証が通らないということが挙げられます。たとえドメイン管理者のアカウント情報を入力したとしても、認証は通りません。

次に、サーバー側から見てみましょう。

まず、IIS7.5 であることが条件です。IIS 7.5 は、Windows 7 および SP1、Windows Server 2008 R2 および SP1 で動作します。次に、該当の Web アプリケーションで Kerberos 認証 (※) が使用されている事が条件です。また、アプリケーションプールの実行アカウントとして ApplicationPoolIdentity (既定) が使用されていることも条件です。環境としてはこの3つの条件を全て満たす必要があります。

※ Windows 認証は、環境や設定等によってNTLM 認証と Kerberos 認証のいずれかが使用されます。ここでは両者の違いなどについては言及しませんが、通常の Windows ドメイン環境であれば Kerberos 認証が使用されます。

さらに、この現象の特徴として、マシンの再起動で解消される事が挙げられます。しかし、IIS の再起動や、アプリケーションプールのリサイクルを行っても回避はできません。また、ドメイン環境においては、定期的 (30 日間隔) にマシンアカウントのパスワードが変更されていますが、その変更後に IIS が再起動された場合に発生する、という特徴もあります。後者は意識していない場合が多いので、確認するのは少し難しいかもしれません(ドメインコントローラー上で dsquery コマンドを使用し、マシンアカウントの pwdlastset 属性を取得する事で確認できます)。

現象の回避策

この現象を一時的に回避するには、前述のように IIS 7.5 のマシンを再起動します。しかし、再度この現象が発生する可能性がある点に注意してください。

恒久的な対策としては、上記の技術文書 2545850 から、修正プログラムを入手し適用します(マシンの再起動が必要です)。または、アプリケーションプールの実行アカウントを既定の ApplicationPoolIdentity から Network Service に変更することでも、回避する事ができます(ワーカープロセスの再起動が生じます)。

該当する環境をお持ちの方は、お手数ですができるだけ早く修正プログラムの適用をご検討ください。

ではまた。
d99 でした。