2016-11-17 100 views
1

我有一個奇怪的問題與Windows身份驗證。我們有一個asp.net webforms應用程序,其中我們有一個使用Windows身份驗證的文件夾。此文件夾已針對IIS中的Windows身份驗證正確配置。該應用程序通過web.config使用.net模擬。當我們使用Windows身份驗證的瀏覽到一個頁面此文件夾中:當前windowsidentity與當前的請求用戶身份一樣windows身份驗證

  • system.web.httpcontext.current.user.Identity.Name返回做請求的用戶名(這是預期)
  • System.security.principal.windowsIdentifier.getCurrent.Name返回,我們一直在我們的產品的新版本,請在運行應用程序(這也是預期)用戶

現在的名字長時間。我們現在發現行爲已經改變。當我們再次執行相同的測試時,httpcontext用戶名和principal.windowsidentity.getcurrent都會返回執行請求的用戶的名稱。

我們已經檢查了所有相關的代碼,我們似乎無法找到與此行爲有關的任何差異。我們在新版本中將應用程序從.Net 4.0轉換爲.Net 4.5.2,但是,當我們將舊版本轉換爲.Net 4.5.2時,行爲保持正確(這兩個屬性顯示不同的標識)似乎沒有區別。

想到哪裏尋找這種行爲的原因?

編輯: 調試告訴我,執行global.asax prerequesthandler時,身份已經有錯誤的值。在開始請求時,網站的模仿尚未執行,且當前標識是應用程序池標識

編輯2: 它似乎是服務器特定的。出於某種原因,舊版本在開發機器上正常工作,但新版本不支持。但是,新版本確實在部署服務器(我們的日常構建)上正常工作。任何人有任何關於可能的原因的指針?

回答

1

對,我找到了問題。問題在於IIS使用Windows身份驗證向該文件夾添加了web.config,在該文件夾中啓用了對該文件夾的模擬。當在同一文件夾上啓用Windows身份驗證和模擬時,Windows身份和請求身份都是同一用戶的行爲是正確的。

我們需要的情況可以通過啓用Windows身份驗證來實現,但在文件夾上禁用模擬。在這種情況下,窗口標識是默認網站的用戶,並且請求標識是訪問頁面的用戶的窗口標識

相關問題