![](/img/trans.png)
[英]ASP.NET | Forms Authentication | Get ALL logged in users(list of all users or count)
[英]Using WindowsIdentity to get a list of files/directories in ASP.NET while logged in using Forms Authentication
編輯7:
我猜想這畢竟不可能完成,可能需要使用某種命令行應用程序來完成並解析輸出,盡管我希望當很多人正在訪問文件夾和/時這可能會很慢或達到NetBIOS會話限制。
編輯6:
使用Windows集成身份驗證(具有有權訪問共享和數據庫的帳戶),我可以獲得文件/目錄的列表。 但是,刷新頁面並獲取UnauthorizedAccessException
。 可能是NetBIOS或ActiveDirectory限制。
5個月,除了“使用模擬”(似乎是通過P / Invoke,因為內置的.NET方式看起來如此脆弱)之外,仍然沒有解決方案,但這也將有相同的問題。 硬編碼的用戶名/密碼不是一種選擇。
Web服務器中內置的“開發”(Windows 7)框(使用IIS或Visual Studio)運行正常。
編輯5:
根據我在互聯網上閱讀的內容以及有關此問題的信息,唯一可行的方法是:
這些都不是一個選擇
由於必須有可以訪問UNC共享文件的Windows窗體應用程序,因此我認為這樣做會起作用。 那,以及當遠程連接到Web服務器並使用Windows資源管理器時,我可以訪問文件。
也許ASP.NET/IIS安全性阻止了它在沒有通過P / Invoke模擬的情況下正常工作。 還是被防火牆阻止?
編輯4:
起作用的一件事是使用基本身份驗證-集成Windows身份驗證和摘要式身份驗證不使用。 但是,這並不是真正的選擇,因為密碼以明文形式發送,並且用戶在訪問頁面時會得到提示(不是我想做的事情)。
編輯3:
無論我如何嘗試,都無法在UNC路徑上獲得文件或目錄的列表(這些文件或目錄的組合並單獨打開)
<authentication mode="Windows" />
<identity impersonate="true"/>
如果我使用與登錄站點相同的帳戶遠程(使用RDP)連接到服務器,則可以正常訪問文件。 它只是無法通過代碼工作。
編輯2:
我試過的是:
InvalidCastException
因為Identity現在是GenericIdentity
) 我無法使用Windows身份驗證,因為我無法添加角色。 我不想提示輸入用戶名/密碼,因為這是一個額外的步驟,並且它不是通過安全連接(即SSL)進行的。 另外,我不能授予ASP.NET帳戶訪問文件的權限(因為我不是域管理員)。
編輯:
該路徑是UNC路徑,不在本地PC上。
使用表單身份驗證,當我嘗試將當前用戶身份轉換為Visual Studio中的WindowsIdentity
並進行調試時,我收到InvalidCastException
。 我只是有:
WindowsIdentity id = (WindowsIdentity)HttpContext.Current.User.Identity;
然后我得到的錯誤是:
Unable to cast object of type 'System.Security.Principal.GenericIdentity' to type 'System.Security.Principal.WindowsIdentity'
我正在使用模擬來獲取文件列表,因為ASP.NET帳戶無權訪問這些文件。 它在使用IIS時有效,但在Visual Studio中不起作用:
WindowsIdentity id = (WindowsIdentity)User.Identity;
using (System.Security.Principal.WindowsImpersonationContext context = id.Impersonate())
{
files = Directory.GetFiles("\\server\share");
context.Undo();
}
將<identity impersonate="true" />
到web.config
不會執行任何操作-盡管我不想這樣做,因為我正在使用ASP.NET帳戶查詢用戶無權訪問的數據庫權限(導致Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'
)。
當我通過web.config打開Windows身份驗證時,嘗試從遠程共享獲取文件列表時會出現UnauthorizedAccessException
(如果我以客戶端PC上的同一用戶遠程連接到IIS框,則可以訪問該文件) 。
此外,ASP.NET帳戶是在Active Directory中設置的帳戶,而不是IIS本地帳戶。
您是說要使用內置Web服務器(Cassini)? 模擬功能與IIS中的功能不同(請參閱Cassini認為是有害的 )。 您可以將IIS用作Visual Studio中的Web服務器。 我通常這樣做是因為它可以防止出現類似這樣的奇怪的部署時間問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.