VBA:登录使用Windows身份验证(VBA: Login using Windows Authe

2019-07-31 05:33发布

我有一个访问应用程序,要求用户输入他们的Windows域用户名和密码进入。 我用下面的VBA代码来实现:

Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
    'Authenticates user and password entered with Active Directory. 

    On Error GoTo IncorrectPassword

    Dim oADsObject, oADsNamespace As Object
    Dim strADsPath As String

    strADsPath = "WinNT://" & strDomain
    Set oADsObject = GetObject(strADsPath)
    Set oADsNamespace = GetObject("WinNT:")
    Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)

    WindowsLogin = True    'ACCESS GRANTED

ExitSub:
    Exit Function

IncorrectPassword:
    WindowsLogin = False   'ACCESS DENIED
    Resume ExitSub
End Function

我注意到,有时当输入正确的信息,访问被拒绝。 我试图调试一次,它给了错误:“网络路径没有被发现。”在Set oADsObject = oADsNamespace.OpenDSObject)线。

不知道为什么,这有时会发生。 它是更好的转换,而不是为LDAP? 我也试过,但不能正确地构建LDAP URL。

Answer 1:

如果用户已经通过其Windows登录认证,为什么让他们再次进入细节?

如果您需要知道哪些用户登录,您可以通过下面的函数很容易得到用户名:

Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long

Function GetUserName() As String

    On Error Resume Next

    Dim sBuffer As String
    Dim lSize As Long
    Dim x As Long

    sBuffer = Space$(32)
    lSize = Len(sBuffer)
    x = IGetUserName(sBuffer, lSize)
    GetUserName = left$(sBuffer, lSize - 1)

End Function



Answer 2:

在良好规范的环境是另外需要至少输入密码。 如果您登录到Windows没关系,你需要再次确认。



文章来源: VBA: Login using Windows Authentication