VB.Net – LDAP Überprüfung ob Passwort eines Users abgelaufen mit dem DirectoryServices.DirectoryEntry

VB.Net – LDAP Überprüfung ob Passwort eines Users abgelaufen mit dem DirectoryServices.DirectoryEntry

Sie erhalten mit diesem Post den Zugang für den kompletten und legal einsetzbaren Sourcecode, zum Ermitteln des Alters eines Passworts per LDAP Abfrage eines Users. Sie können die Funktionaltität zum Beispiel dahin gehend erweitern das Sie ein Windows-Event jeden Tag laufen lassen, was alle Passwörter der Windows-Benutzer überprüft und automatisch per Mail den Windows-Benutzer auffordert das Passwort zeitnah zu ändern.

Was ist eigentlich LDAP ?
LDAP basiert auf dem Client-Server-Modell und kommt bei sogenannten Verzeichnisdiensten (englisch directories oder directory services) zum Einsatz. Es beschreibt die Kommunikation zwischen dem LDAP-Client und dem Verzeichnis-(Directory-)Server. Aus einem solchen Verzeichnis können objektbezogene Daten, wie zum Beispiel Personendaten oder Rechnerkonfigurationen, ausgelesen werden. Die Kommunikation erfolgt auf Basis von Abfragen.

Das Verzeichnis kann beispielsweise ein Adressbuch enthalten: In seinem E-Mail-Client stößt ein Nutzer die Aktion Suche die Mailadresse von Joe User an. Der E-Mail-Client formuliert eine LDAP-Abfrage an das Verzeichnis, das die Adressinformationen bereitstellt. Das Verzeichnis formuliert die Antwort und übermittelt sie an den Client: joe.user@example.org.

Mittlerweile hat sich im administrativen Sprachgebrauch eingebürgert, dass man von einem LDAP-Server spricht. Damit meint man einen Directory-Server, dessen Datenstruktur der LDAP-Spezifikation entspricht und der über das LDAPv3-Protokoll Daten austauschen kann.

Das Protokoll bietet alle Funktionen, die für eine solche Kommunikation notwendig sind: Anmeldung am Server (bind), die Suchabfrage (Suche mir bitte alle Informationen zum Benutzer mit dem Namen „Joe User“) und die Modifikation der Daten (Ändere das Passwort beim Benutzer Joe User).

Neuere Implementierungen, die über RFC 2251 hinausgehen und Gegenstand für eine mögliche Erweiterung des Protokolls sind, berücksichtigen die Replikation der Daten zwischen verschiedenen Verzeichnissen.

Zu beachten ist hierbei, dass „Verzeichnis“ im Sinne beispielsweise eines Telefonbuches gemeint ist und nicht im Sinne von „Dateiordner“.
Quellenhinweis

SOURCECODE:

 
    '============================================
    ' VB.NET Beispiel in Visual Basic .Net
    ' © wilfried.bitz@bridgesolution.de
    '============================================
 
    Public Function LDAP_Passwort_laeuft_bald_ab( _
        ByVal strWinBenutzer As String, _
        ByVal interval As Integer) As String
        LDAP_Passwort_laeuft_bald_ab = ""
 
        Try
 
            '------------------------------------
            ' Bind to the users container. 'CN=users, 'xxx.domaene.de,DC=xxx.domaene,DC=de
            Dim entry As New DirectoryServices.DirectoryEntry("LDAP://192.xxx.x.x", "admin@domaene.de", "xxxxxxx")
            ' Create a DirectorySearcher object.
            Dim mySearcher As New DirectoryServices.DirectorySearcher(entry)
            ' Create a SearchResultCollection object to hold a collection of SearchResults
            mySearcher.Filter = [String].Format("(SAMAccountName={0})", "*" & strWinBenutzer & "*")
            mySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree
            ' returned by the FindAll method.
            Dim result2 As DirectoryServices.SearchResultCollection = mySearcher.FindAll
            ' Create an object to hold a single result from the result collection.
            Dim resEnt1 As DirectoryServices.SearchResult
            ' Get search results. For more information, see Getting Search Results.
            '------------------------------------
 
            '------------------------------------
            Dim strTmp As String
            Dim pwdDate As DateTime
            For Each resEnt1 In result2
 
                Dim de As DirectoryServices.DirectoryEntry = resEnt1.GetDirectoryEntry
                Dim valBytes(7) As Byte
                Dim objpwd As Object = de.Properties("pwdLastSet").Value
 
                Debug.Print(objpwd.highpart)
                Debug.Print(objpwd.lowpart)
 
                BitConverter.GetBytes(objpwd.lowpart).CopyTo(valBytes, 0)
                BitConverter.GetBytes(objpwd.highpart).CopyTo(valBytes, 4)
                strTmp = BitConverter.ToInt64(valBytes, 0)
 
                pwdDate = DateTime.FromFileTimeUtc(strTmp)
 
                'nur den ersten Eintrag wählen
                Exit For
 
            Next
            '------------------------------------
 
            '------------------------------------
            Dim dtmDateOff As Date = DateAdd(DateInterval.Day, interval, pwdDate)
            Dim strtmp2 As String = dtmDateOff
 
            If DateTime.Now > DateAdd(DateInterval.Day, interval, pwdDate) Then
                LDAP_Passwort_laeuft_bald_ab = strtmp2
            End If
            '------------------------------------
 
        Catch ex As Exception
            MsgBox("LDAP_Passwort_laeuft_bald_ab: " & Err.Description)
 
        End Try
 
    End Function

Spendierst du mir eine Tasse Kaffee? Ich würd mich riesig freuen. DANKE !! 🙂

Author: admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.