所以這裏就是我試圖做的:獲得認證的Windows用戶名
我想,以確保在使用Windows身份驗證的ASP.NET應用程序特定的虛擬目錄。虛擬目錄只有一個文件,default.aspx。在代碼隱藏方面,我只想獲取登錄用戶的Windows用戶名,但無論使用什麼屬性,它都會返回應用程序的安全上下文。
我需要站點本身在「AppContext」用戶的上下文中運行文件權限等。但是,要確定用戶是否有權訪問站點,我需要使用該用戶的Windows域憑據。
IIdentity windowsIdentity = WindowsIdentity.GetCurrent();
logger.Info("Windows username: " + windowsIdentity.Name);
logger.Info("System.Environment.Username: " + System.Environment.UserName);
logger.Info("HttpContext: " + HttpContext.Current.User.Identity.Name);
輸出是:
Windows username: DOMAIN\AppContext
System.Environment.Username: AppContext
HttpContext:
假設我登錄我自己和我的Windows用戶名是「斯科特」,我期望的HttpContext返回「DOMAIN \斯科特」,但它什麼也不返回嘗試訪問虛擬目錄時,我確實獲得了Windows身份驗證對話框,並且我可以成功驗證爲「Scott」。在「IIS7身份驗證」對話框中,除「Windows身份驗證」外,所有身份驗證機制均已關閉。
奇怪的是,我有另一個網站,它的工作很好,我不知道有什麼區別。唯一的區別是我可以看到工作站點是一個實際的IIS網站,我目前正在使用的是一個虛擬目錄。
工作站點的輸出如下。這就是我試圖在虛擬目錄上覆制的東西,但我必須錯過一些東西。
Windows username: DOMAIN\Scott
System.Environment.Username: AppContext
HttpContext: DOMAIN\Scott
其他注意事項:
- 無論是網站有在web.config中的
<identity>
元素。 <authentication mode="Windows" />
設置正確。- 虛擬目錄和站點都只在IIS中啓用Windows身份驗證。
- 代碼在
Page_Init
方法中執行。 - 底線是,我只需要讓站點本身在「AppContext」用戶的安全上下文下運行(AppPool配置爲運行該用戶),但我需要獲取當前登錄的用戶名後面的default.aspx.cs代碼。
什麼是您的Web.config中的身份驗證模式?它是''? –
還要確保爲您的項目禁用匿名身份驗證(選擇Web窗體項目,然後按F4打開「屬性」面板),並啓用Windows身份驗證。這些都是項目屬性。 –
更新了問題以包含'
Scott