Pertanyaan VBA: Login menggunakan Windows Authentication


Saya memiliki Aplikasi Akses yang mengharuskan pengguna memasukkan pengguna domain dan kata sandi Windows untuk masuk. Saya telah menggunakan kode VBA berikut untuk mencapai ini:

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

Saya perhatikan bahwa terkadang ketika informasi dimasukkan dengan benar, akses ditolak. Saya mencoba melakukan debug satu kali dan itu memberi kesalahan: "Jalur jaringan tidak ditemukan. "pada Set oADsObject = oADsNamespace.OpenDSObject) garis.

Tidak yakin mengapa ini terjadi kadang-kadang. Apakah lebih baik mengonversi ke LDAP? Saya telah mencoba tetapi tidak dapat membuat URL LDAP dengan benar.


5
2017-08-27 14:46


asal


Jawaban:


Jika pengguna sudah diautentikasi melalui login Windows mereka, mengapa mereka memasukkan detail lagi?

Jika Anda perlu mengetahui pengguna mana yang masuk, Anda bisa mendapatkan nama pengguna dengan sangat mudah dengan fungsi berikut:

Deklarasikan Fungsi IGetUserName Lib "advapi32.dll" Alias ​​"GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long

Fungsi GetUserName () Sebagai String

    Pada Kesalahan Lanjutkan Berikutnya

    Dim sBuffer As String
    Redupkan Ukuran Panjang
    Dim x As Long

    sBuffer = Spasi $ (32)
    lSize = Len (sBuffer)
    x = IGetUserName (sBuffer, lSize)
    GetUserName = sisa $ (sBuffer, lSize - 1)

Fungsi Akhir


3
2017-08-28 19:30



Di lingkungan GxP, Anda perlu memasukkan setidaknya kata sandi. Tidak masalah jika Anda login ke Windows, Anda perlu mengkonfirmasi lagi.


0
2017-11-27 14:30