[英]LogonUser API doesn't work correctly with Domain from Workstation
為了測試,我設置了一個簡單的域並添加了一些用戶。 我也有未加入該域的 Win10 工作站。 通過提供域用戶名和密碼以通過 Window 的資源管理器查看文件共享,我可以毫無問題地從工作站訪問 DC。 我什至可以使用 vb.net 中的 LDAP 來驗證 DC 帳戶。
我正在嘗試使用 LOGONUSER API(嘗試了所有風格)來嘗試從未加入該域的工作站驗證域帳戶(本地帳戶驗證正常)。 無論我使用什么標志/組合,它總是返回 false(登錄失敗)。 我獲得成功的唯一時間是使用標志 NEW_CREDENTIALS 時,但據說即使憑據無效,默認情況下也會返回真值。 顯然,從閱讀其他與從工作站計算機到域控制器使用 LogonUser API 相關的帖子,似乎沒有人可以讓它工作。 我什至在我們公司試過。 沒有運氣的域。 但是,如果我將我編寫的程序(從多個來源借用/嘗試過代碼)放在任何已經加入域的計算機上,它就可以正常工作,它甚至可以跨域之間完全信任進行身份驗證。 它只是無法從非域工作站到域。 需要做什么才能使這項工作發揮作用? 我找不到任何官方文件說它不起作用,如果我能找到它們存在那就太好了。 謝謝你的時間..
<DllImport("advapi32.dll", SetLastError:=True)> _
Private Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String,
ByVal dwLogonType As LogonType, ByVal dwLogonProvider As LogonProvider, ByRef phToken As IntPtr) As Boolean
End Function
Enum LogonType As Integer
LOGON32_LOGON_INTERACTIVE = 2
LOGON32_LOGON_NETWORK = 3
LOGON32_LOGON_BATCH = 4
LOGON32_LOGON_SERVICE = 5
LOGON32_LOGON_UNLOCK = 7
LOGON32_LOGON_NETWORK_CLEARTEXT = 8
LOGON32_LOGON_NEW_CREDENTIALS = 9
End Enum
Enum LogonProvider As Integer
LOGON32_PROVIDER_DEFAULT = 0
LOGON32_PROVIDER_WINNT35 = 1
LOGON32_PROVIDER_WINNT40 = 2
LOGON32_PROVIDER_WINNT50 = 3
End Enum
public sub TryLogon()
Dim token As New IntPtr
Dim Username as string = "myuser",domain as string = "mydomain.local",password as string = "password"
Dim retVal = LogonUser(Username, domain, Password, LogonType.LOGON32_LOGON_NETWORK, LogonProvider.LOGON32_PROVIDER_DEFAULT, token)
If retVal = False Then
Dim errMsg = New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()).Message
MsgBox(errMsg, MsgBoxStyle.Critical, "Logon")
End If
end sub
LogonUser()
要求當前用戶具有“作為操作系統的一部分”權限。 默認情況下,它不會授予任何人,甚至管理員也不授予。
編輯:在LogonUser
之前,您需要調用AdjustTokenPrivileges()
- 將SE_TCB_NAME
權限添加到當前用戶。
編輯:我必須檢查一下,但我不認為 LogonUser 是為了對來自不受信任的權限的用戶(例如當前機器不在的域)進行身份驗證。
考慮在其中一台域計算機(可能是域控制器)上創建一個虛擬共享,並針對它調用WNetAddConnection2()
。
我在未連接到域的 Windows 10 (1607) 上解決了我的問題: - 使用“。” 作為域 - LOGON32_LOGON_INTERACTIVE - LOGON32_PROVIDER_DEFAULT
只是讓你知道。
以下帖子讓我走上了正軌: LogonUser() not authentication user for invalid domain when computer is not in a domain
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.