[英]How to reliably check the windows domain id of current user on a workstation
我正在使用C#和.Net Framework 4。
我正在尋找一種萬無一失的方法來獲取當前登錄的Windows用戶的登錄ID,該用戶不會受到冒充或黑客攻擊。 我正在尋找以下形式:DOMAINNAME \\ USERNAME
例如SOMEDOMAIN \\ JohnDoe
目前我所擁有的最好的是:
var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
var currentLoginId = identity.Name;
這是否可以模仿(在知道用戶名和密碼的人之外),如果是這樣,有更好的方法嗎?
此時可能至少涉及四種不同的身份:
在你的代碼中你得到(1)。 這通常很好,通常與(2)相同。
要檢索(2),您可以:
WindowsIdentity.GetCurrent
以獲取模擬身份 RevertToSelf
函數撤消模擬 WindowsIdentity.GetCurrent
以獲取基礎進程標識 除非您編寫了更改進程標識的非托管代碼,否則(2)和(3)將是相同的。 正如@Daniel所指出的那樣,(3)和(4)在Windows“run as”命令存在時可能合法地不同。
編輯:您可以相信當前的
WindowsIdentity
就是它所說的那樣,只要您可以信任應用程序中的任何給定數據。您可以通過將調試器附加到您的進程並偽造此調用的返回值來欺騙它,但是如果您要這樣做,您也可以偽造將您的用戶名傳遞給數據庫的代碼段。
100%安全的方法是使用集成身份驗證/ SSPI連接到數據庫。
只有部分答案:
我相信System.Security.Principal.WindowsIdentity.GetCurrent();
將返回與當前正在執行的線程關聯的Windows用戶帳戶。 如果線程或應用程序是在與登錄用戶不同的用戶帳戶下啟動的,那么在使用它之后您將無法獲得所需的內容。
如果您可以確定您的應用程序沒有使用“run-as”功能(或編程方式)開始,並且您沒有在線程的身份內部做任何事情,您可能可以確定這是登錄用戶的帳戶,但我不是100%。
通過使用ADSI可以找到與運行應用程序的窗口“session”相關聯的用戶帳戶(請參閱System.DirectoryServices)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.