by WebSurfer
2015年6月8日 15:47
先の記事 では、基本認証の場合、IIS で資格情報がキャッシュされるという話を書きました。
この記事では、統合 Windows 認証においてもそれと似た話があって、User.Identity.Name で取得されるログインユーザーの Windows アカウント名が Web サーバーのキャッシュから取得されるという話を書きます。
Windows 認証が有効になっていて、かつ、現在ページ要求を行っているユーザーがログイン済みの場合、User.Identity.Name で取得されるのは DOMAIN\USERNAME の形式で表されるドメインユーザー名になります。(詳しくは先の記事 ASP.NET の ID オブジェクト を見てください)
ところが、Active Directory ドメインコントローラーでユーザー名を変更しても、User.Identity.Name で取得されるログインユーザー名に変更が反映されません(古いままになります)。
その具体例は stackoverflow の記事 IIS Returning Old User Names to my application に出ていますので、興味がありましたらそれをみて下さい。(手抜きですみません)
その理由は、Microsoft サポートの記事 KB946358 に書かれていますように、Web サーバーにユーザー名がキャッシュされ、キャッシュに情報が存在する場合はドメインコントローラーに照会せず、キャッシュされたユーザー名の情報を返すからです。
対応策は、
-
ドメインユーザー名には将来にわたって変更する必要がないもの(例:社員番号)を使用する、または、
-
KB946358 に従って Web サーバーのレジストリを書き換えてキャッシュを無効にする。
といったところでしょうか。
ただ、キャッシュするのはドメインコントローラーの負荷とネットワークトラフィックの削減のためだそうですので、キャッシュを無効にするとパフォーマンスに影響がありそうというところが気がかりではありますが・・・