2014-06-11 66 views
0

所以這裏就是我試圖做的:獲得認證的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代碼。
+0

什麼是您的Web.config中的身份驗證模式?它是''? –

+0

還要確保爲您的項目禁用匿名身份驗證(選擇Web窗體項目,然後按F4打開「屬性」面板),並啓用Windows身份驗證。這些都是項目屬性。 –

+0

更新了問題以包含' Scott

回答

0

檢查您的授權設置。

如果資源可以被匿名用戶訪問 - 並且瀏覽器的請求鏈中沒有任何資源觸發了身份驗證 - IIS將不會對用戶進行身份驗證。

因此,您必須擁有Windows身份驗證並拒絕匿名訪問才能在HttpContext中查看用戶名。

+0

中調用它。奇怪的是,當我向網絡添加時。配置虛擬目錄內,它永遠不會讓我登錄。它只是無限地重新顯示Windows身份驗證對話框。可能與它有關... – Scott

+0

是的。未經授權 - 你刪除匿名,但沒有權利登錄;)無盡的循環;) – TomTom

0

添加一個Web.config文件夾內,並設置<authentication mode="Windows"/>

0

你會在System.Threading.Thread.CurrentPrincipal.Identity.Name找到它。

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write(System.Threading.Thread.CurrentPrincipal.Identity.Name); 
    } 
} 
+0

也作爲NULL值返回。 – Scott

+0

因此,在這種情況下,您應該仔細檢查Windows身份驗證是唯一啓用的身份驗證。如果我記得正確,服務器將嘗試匿名,基本,窗體和Windows,所以如果其中一個先啓用,那麼它會選擇該認證用戶。要確認這一點,您可以在IE中禁用自動身份驗證功能。使用說明:http://bit.ly/1pkeKIo確保提示您登錄。 – GrokSrc