2015-05-02 358 views
1

我知道這個問題已被詢問很多次,但我的問題是不同的。我正在開發一個啓用了Windows身份驗證和模擬的Web應用程序。我登錄到我的電腦domain\user。在這個應用程序中,我只是在網絡計算機目錄中創建一個名爲newDir的目錄,例如\\computerName\myFolder。我對此目錄擁有完全的訪問控制權。當我在web.config文件中明確輸入我的用戶名和密碼<identity impersonate="true" userName="domain\user" password="pass">並運行應用程序時,它不會提示輸入用戶名和密碼,而是按預期方式在指定的目錄中創建目錄。但是當我從identity元素中刪除用戶名和密碼時,impersonation打開並運行應用程序,它會提示輸入用戶名和密碼,但不會接受我從web.config文件中的identity元素中刪除的相同用戶名和密碼,有時它不會提示輸入用戶名和密碼,只顯示例外頁面access to the path "\\computerName\myFolder\newDir" is denied訪問路徑「」被拒絕

爲了測試我添加了一個線檢查,根據哪個用戶名運行代碼:

Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name + "<br/>");

它打印出來的一樣domain\user用戶名。

有沒有人知道這裏發生了什麼?

回答

1

聽起來像使用模擬訪問UNC路徑與本地路徑是一種特殊情況。根據https://msdn.microsoft.com/en-us/library/aa292118%28v=vs.71%29.aspx,「如果應用程序駐留在UNC共享上,ASP.NET始終模仿IIS UNC令牌訪問該共享,除非使用配置的帳戶。如果您提供明確配置的帳戶,ASP.NET將優先使用該帳戶到IIS UNC令牌。「

這個答案UNC access whilst using impersonation asp.net也有一些指針。

聽起來您可能只限於一個用戶訪問UNC用戶 - 無論是在web.config中配置,還是應用程序池標識或您爲委派選擇的用戶。

+0

出於安全原因,Windows身份驗證不會以純文本形式向Web服務器提供用戶的用戶名和密碼,因此Web服務器無法通過網絡以用戶身份進行身份驗證。 (理論上,可以通過Kerberos委託在域內模擬,但這更復雜,我猜ASP.NET不支持它。) –