這是我的場景。我創建了一個使用集成Windows身份驗證的應用程序來工作。在Application_AuthenticateRequest()
中,我使用HttpContext.Current.User.Identity
來獲取我網站用戶的當前WindowsPrincipal
。IIS將舊用戶名返回給我的應用程序
現在,這裏是有趣的部分。我們的一些用戶最近結婚了,他們的名字也改變了。 (即用戶的NT登錄從jsmith
更改爲jjones
),當我的應用程序驗證它們時,IIS將我的舊登錄傳遞給我。我繼續看到jsmith
傳遞給我的應用程序,直到我重新啓動我的服務器!註銷客戶端不起作用。重新啓動應用程序池不起作用。只有完全重新啓動。
有人知道這裏發生了什麼嗎?有什麼我可以用來刷新緩存給我這個問題的命令?我的服務器配置有誤嗎?
注意:我絕對不想重新啓動IIS,我的應用程序池或機器。由於這是一個生產箱,這些並不是真正可行的選擇。
AVID -
是的,他們的UPN與他們的登錄名一起改變。和Mark/Nick ...這是一個生產企業服務器...它不能只是重新啓動或重新啓動IIS。
跟進(爲後人):
Grhm的回答得很正確。這個問題在低容量的服務器中彈出,在這些服務器中沒有很多人使用你的應用程序,但是有足夠的請求將用戶的身份保存在緩存中。這似乎說明爲什麼緩存項沒有10分鐘後默認刷新KB的關鍵部分是:
緩存條目做超時,但是機會是由應用程序重複 查詢保留現有高速緩存條目活動的最大生存期爲 。
我不完全相信在我們的代碼是什麼原因導致這(重複查詢),但爲我們工作的決議是從1周看似淫穢默認LsaLookupCacheExpireTime
值切成短短小時。這對於我們來說,將用戶在現實世界中受到影響的可能性降低到基本爲零,但同時又不會對我們的目錄服務器造成極端數量的SID-Name查找。如果應用程序通過SID查找用戶信息而不是將用戶數據映射到文本登錄名,那麼更好的解決方案是IMO。 (請注意,供應商!如果您在應用程序中依賴於AD身份驗證,則需要將SID置於您的身份驗證數據庫中!)
服務器具有從認證服務緩存的舊用戶名。這應該工作。 – 2008-10-03 21:44:12
-1:他明確表示他不想重新啓動IIS – 2009-02-24 10:42:53