IIS 將舊使用者名返回到我的應用程序
這是我的場景。我創建了一個使用集成 Windows 身份驗證的應用程序才能工作。在
Application_AuthenticateRequest()中,我HttpContext.Current.User.Identity用來獲取WindowsPrincipal我網站使用者的目前資訊。現在這是有趣的部分。我們的一些使用者最近結婚了,他們的名字發生了變化。(即使用者的 NT 登錄從 更改
jsmith為jjones),當我的應用程序對其進行身份驗證時,IIS 將他們的 OLD LOGIN 傳遞給我。我繼續看到jsmith傳遞給我的應用程序,直到我重新啟動我的伺服器!註銷客戶端不起作用。重新啟動應用程序池不起作用。只有完全重啟。有誰知道這裡發生了什麼?是否有某種命令我可以用來刷新任何給我這個問題的記憶體?我的伺服器配置錯誤嗎?
注意:我絕對不想重新啟動 IIS、我的應用程序池或機器。由於這是一個生產盒,這些都不是真正可行的選擇。
狂熱 -
是的,他們的 UPN 連同他們的登錄名一起改變了。還有馬克/尼克……這是一個生產企業伺服器……它不能只是重新啟動或重新啟動 IIS。
跟進(為後代):
Grhm 的回答很到位。這個問題出現在低容量伺服器中,您沒有很多人使用您的應用程序,但會發出足夠多的請求以將使用者的身份保存在記憶體中。KB中似乎描述了為什麼預設 10 分鐘後不刷新記憶體項的關鍵部分是:
記憶體條目確實會超時,但是應用程序的重複查詢可能會在記憶體條目的最大生命週期內保持現有記憶體條目處於活動狀態。
我不確定我們的程式碼中是什麼導致了這種情況(重複查詢),但對我們有用的解決方案是將
LsaLookupCacheExpireTime值從看似淫穢的預設值 1 週減少到僅幾個小時。對我們來說,這將使用者在現實世界中受到影響的可能性降低到基本上為零,但同時不會導致對我們的目錄伺服器進行極端數量的 SID-Name 查找。如果應用程序通過 SID 查找使用者資訊,而不是將使用者數據映射到文本登錄名,則 IMO 更好的解決方案是。(注意,供應商!如果您在應用程序中依賴 AD 身份驗證,則需要將 SID 放入身份驗證數據庫中!)
我最近遇到了類似的問題,正如 Robert MacLean 的回答中所述,如果您沒有以使用者身份登錄,AviD 的組策略更改將不起作用。
我發現按照 MS KB946358的描述更改LSA 查找記憶體大小無需重新啟動或回收任何應用程序池或服務即可工作。
我發現這是對類似問題的答案:更改使用者登錄名後的錯誤身份驗證。
您可能需要查看以下系統呼叫,例如以下系統呼叫:
LookupAccountName() LookupAccountSid() LsaOpenPolicy()您可以使用它們編寫 C++/CLI (/Managed-C++) 應用程序來詢問 LSA 記憶體。