Avatar billede claush2 Nybegynder
30. maj 2003 - 12:06 Der er 14 kommentarer og
1 løsning

Kontrol af Username/Pwd i Active Directory

Jeg har behov for at kontrollere om et indtastet brugerid og password eksisterer i et domæne.
Har nogen en idé om hvordan man gør dette?
Avatar billede somaliomar Praktikant
30. maj 2003 - 12:16 #1
Avatar billede claush2 Nybegynder
30. maj 2003 - 12:58 #2
Ja - men kun delvis.
Jeg har allerede det kodeeksempel (jeg var ikke klar over hvor det stammede fra), men får en fejl, når jeg forsøger at validere en bruger.
Retfærdighedsvis skal det siges, at jeg får en "Invalid userid/password"-fejl, hvis brugeroplysningerne ikke er korrekte, men også korrekte oplysninger giver (en anden) fejl.
Nogle ideer?
Avatar billede somaliomar Praktikant
30. maj 2003 - 12:59 #3
Hvilken version af VB bruger du? Kan du poste din kode her?
Avatar billede claush2 Nybegynder
30. maj 2003 - 13:02 #4
VB6 - koden er magen til den der er i den artikel du henviste til:
Private Function VerifyAccess(strUser As String, strPassword As String, strGroup As String) As Boolean

    On Error Resume Next

    Dim strDnsDomain As String
    Dim strDomains() As String
    Dim i As Integer
    Dim hKey As Long
    Dim strUserUPN As String
    Dim objUser As IADsUser
    Dim objDsOpenObject As IADsOpenDSObject
    Dim objGroup As IADsGroup

    strUserUPN = "CN=" & strUser & ",CN=Users"
    RegOpenKeyEx HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\TcpIp\Parameters", 0&, KEY_QUERY_VALUE, hKey
    strDnsDomain = Space(255)
    RegQueryValueEx hKey, "Domain", 0&, REG_SZ, ByVal strDnsDomain, Len(strDnsDomain)
    RegCloseKey hKey

    'This gets the domain from registry settings on user machine
    strDnsDomain = "." & Left(strDnsDomain, InStr(strDnsDomain, Chr(0)) - 1)
    strDomains = Split(strDnsDomain, ".")
    For i = 1 To UBound(strDomains)
        strUserUPN = strUserUPN & ",DC=" & strDomains(i)
    Next i

    Set objDsOpenObject = GetObject("LDAP:")

    If Len(strPassword) Then
        'Log on to AD as the specified user and retrieve all user information
'--> denne fejler altid, dvs. objUser er altid nothing!
        Set objUser = objDsOpenObject.OpenDSObject("LDAP://" & strUserUPN, strUserUPN, strPassword, ADS_SECURE_AUTHENTICATION)
    Else
        'No password, so just use anonymous bind...
        Set objUser = GetObject("LDAP://" & strUserUPN)
    End If

    'Return failure if user not found (or logon credentials rejected)
    If Len(objUser.Guid) = 0 Then Exit Function

    'Now, enumerate all groups the user is in
    For Each objGroup In objUser.Groups
        If LCase(objGroup.Name) = "cn=" & LCase(strGroup) Then
            VerifyAccess = True
            Exit For
        End If
    Next
End Function
Avatar billede claush2 Nybegynder
30. maj 2003 - 13:04 #5
Fejlen ved korrekt UserName/Password er:
"There is no such object on the server. "
Avatar billede somaliomar Praktikant
30. maj 2003 - 13:19 #6
Hvad får du af fejl udover "There is no such object on the server."?
Avatar billede claush2 Nybegynder
30. maj 2003 - 13:25 #7
Hvis bruger er ukendt:
"Logon failure: unknown username or bad password"
Hvis bruger er kendt, men password forkert:
"A local error has occurred"
og endelig når begge dele er korrekt:
"There is no such objecy on the server".

Det ser ud til at der er konsekvens i fejlmeddelelserne, så jeg kan bruge det, men er ikke vild for at basere koden på ren fejlhåndtering....
Jeg har ikke brug for at logge brugeren ind i domænet, kun at checke at han har lov!
Avatar billede claush2 Nybegynder
30. maj 2003 - 13:53 #9
Jeg fandt det, og din link bekræfter - herligt!
Der er tale om at brugeren er oprettet i en anden gruppe end den normale "Users". Validering af brugernavn/password sker under alle omstændigheder, men objektet kan åbenbart kun oprettes, hvis man giver den korrekte LDAP-sti...
Tak fo hjælpen - det var den sparring jeg havde brug for (send et svar, så jeg kan give point).
Avatar billede somaliomar Praktikant
30. maj 2003 - 14:51 #10
OK. Hvilken LDAP-sti bruger du så nu?
Avatar billede claush2 Nybegynder
30. maj 2003 - 14:55 #11
En sti, der svarer til den definerede struktur:
  LDAP://CN=TestUser,OU=Grp1,OU=MainGrp,DC=TestDomain,DC=DK
- altså
  Bruger: TestUser, oprettet i OU Grp1, der er oprettet i OU MainGrp, der ligger i domænets rod.
Undskyld hvis beskrivelsen er lidt ved siden af, men mit kendskab til disse dele er begrænset...
Avatar billede claush2 Nybegynder
30. maj 2003 - 14:58 #12
Jeg glemte en vigtig detalje:
Det er IKKE nok at få checket username/Password, sådan nogle små detaljer som at kontoen er deaktiveret, låst eller Udløbsdato er nået, kan kun aflæses i brugerobjektet, når man endelig har fået fat i det!
Avatar billede somaliomar Praktikant
30. maj 2003 - 14:59 #13
Mit kendskab til LDAP er også ret begrænset. Det er netop derfor jeg spørger :D
Kan du paste den kode der virker herinde, så vi kan blive klogere? :)
Avatar billede claush2 Nybegynder
30. maj 2003 - 15:19 #14
Koden er den samme som jeg sendte tidligere - det er kun LDAP-stien der afviger og DEN er afhængig af hvor kreativ systemadministratoren har været!
Man skal altså ind og aflæse træstrukturen, som så angives bagvendt i stien, i mit eksempel herover er strukturen altså:
TestDomain.dk
  OU: MainGrp
      OU: Grp1
          User: TestUser
OU - står for Organizational Unit (så vidt jeg kan afgøre).
Sidste led angiver den container (CN) man ønsker at åbne - i mit tilfælde brugeren - Det kunne også have været en OU der istedet blev vist angivet som CN, hvis det var den man skulle have fat i.
Avatar billede somaliomar Praktikant
30. maj 2003 - 15:21 #15
Du skal have tak :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester