0

为了测试,我设置了一个简单的域并添加了一些用户。我也有未加入该域的 Win10 工作站。通过提供域用户名和密码以通过 Window 的资源管理器查看文件共享,我可以毫无问题地从工作站访问 DC。我什至可以使用来自 vb.net 的 LDAP 来验证 DC 帐户。

我正在尝试使用 LOGONUSER API(尝试所有风格)来尝试从未加入该域的工作站验证域帐户(本地帐户验证 OK)。无论我使用什么标志/组合,它总是返回 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

4

2 回答 2

0

LogonUser()要求当前用户具有“作为操作系统的一部分”的权限。默认情况下,它不授予任何人,甚至不授予管理员。

编辑:之前LogonUser,您需要调用AdjustTokenPrivileges()- 将SE_TCB_NAME权限添加到当前用户。

编辑:我必须检查一下,但我不认为 LogonUser 是为了验证来自不受信任的权威机构的用户(例如,当前机器不在的域)。

考虑在其中一台域机器(可能是域控制器)上创建一个虚拟共享,然后调用WNetAddConnection2()它。

于 2019-05-08T20:51:05.147 回答
0

我通过以下方式解决了未连接到域的 Windows 10 (1607) 上的问题: - 使用“。” 作为域 - LOGON32_LOGON_INTERACTIVE - LOGON32_PROVIDER_DEFAULT

只是让你知道。

以下帖子使我步入正轨:当计算机不在域中时,LogonUser() not authentication user for invalid domain

于 2020-04-24T06:52:03.377 回答