これが私のシナリオです。機能するために統合 Windows 認証を使用するアプリケーションを作成しました。では、自分の Web サイトのユーザーの現在の情報を取得するためApplication_AuthenticateRequest()
に使用します。HttpContext.Current.User.Identity
WindowsPrincipal
ここが面白い部分です。一部のユーザーは最近結婚し、名前が変わりました。(つまり、ユーザーの NT ログインが からjsmith
に変わりますjjones
)、アプリケーションがユーザーを認証すると、IIS はユーザーの OLD LOGIN を渡します。jsmith
サーバーを再起動するまで、アプリケーションに渡されたままです。クライアントのログオフは機能しません。アプリ プールを再起動しても機能しません。完全な再起動のみ。
ここで何が起こっているか知っている人はいますか?この問題を引き起こしているキャッシュをフラッシュするために使用できるコマンドはありますか? サーバーの構成が間違っていますか?
注: IIS、アプリケーション プール、またはマシンを再起動したくありません。これは生産用のボックスであるため、これらは実際には実行可能なオプションではありません。
アビッド -
はい、ログイン名とともに UPN が変更されました。Mark/Nick... これは運用エンタープライズ サーバーです... ただ再起動したり、IIS を再起動したりすることはできません。
フォローアップ(後世のために):
Grhm の答えは的を射ていました。この問題は、アプリケーションを使用する人が多くない低ボリュームのサーバーで発生しますが、ユーザーの ID をキャッシュに保持するために十分な要求が行われます。デフォルトの 10 分後にキャッシュ項目が更新されない理由を説明しているように見えるKBの重要な部分は次のとおりです。
キャッシュ エントリはタイムアウトしますが、アプリケーションによるクエリの繰り返しにより、既存のキャッシュ エントリがキャッシュ エントリの最大有効期間にわたって存続する可能性があります。
私たちのコードの何がこれを引き起こしているのか (繰り返しのクエリ) は正確にはわかりませんが、私たちにとってうまくいった解決策はLsaLookupCacheExpireTime
、一見わいせつなデフォルトの 1 週間からわずか数時間に値を削減することでした。これにより、ユーザーが現実の世界で影響を受ける可能性が実質的にゼロになり、同時に、ディレクトリ サーバーに対して極端な数の SID-Name ルックアップが発生することもありません。IMO のさらに優れたソリューションは、ユーザー データをテキストのログイン名にマッピングする代わりに、アプリケーションが SID でユーザー情報を検索することです。(ベンダーの皆さん、注意してください! アプリケーションで AD 認証に依存している場合は、認証データベースに SID を配置する必要があります!)