簡體   English   中英

LogonUser API 無法與 Workstation 中的域一起正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM