Feedback

VB - LDAP - Authentifizieren eines Benutzers in der Domäne

Veröffentlicht von am 11/21/2007
(2 Bewertungen)
Kann ein Benutzer in der Domäne authentifiziert werden?

UPDATE:
Nun wird das Passwort dem Active Directory verschlüsselt übermittelt. Danke an Volker Steitz für den Hinweiß.
Imports System.Security
Imports System.DirectoryServices
Imports System.DirectoryServices.ActiveDirectory

Public Shared Function Authenticate(ByVal domain As String, ByVal username As String, ByVal password As String) As Boolean 
    Dim pwd As New SecureString() 
    Dim bAuth As Boolean = False 
    Dim entry As DirectoryEntry = Nothing 
    
    'Durchlaufe das Passwort und hänge es dem SecureString an 
    For Each c As Char In password 
        pwd.AppendChar(c) 
    Next 
    
    'Bewirkt, dass das Passwort nicht mehr verändert werden kann 
    pwd.MakeReadOnly() 
    
    'Passwort wird einem Pointer übergeben, damit dieser später "entschlüsselt" werden kann 
    Dim pPwd As IntPtr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(pwd) 
    
    Try 
        entry = New DirectoryEntry(String.Concat("LDAP://", domain), username, System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPwd)) 
        Dim nativeObject As Object = entry.NativeObject 
        bAuth = True 
    Catch ex As Exception 
        bAuth = False 
    Finally 
        entry.Close() 
        entry.Dispose() 
    End Try 
    Return bAuth 
End Function 

9 Kommentare zum Snippet

Volker Steitz schrieb am 11/21/2007:
Das halt ich für recht kritisch. Die Angaben wie Password und Username werden unverschlüsselt gegen ein Active Directory geschickt. Null Problem das abzufangen.
Gut wär´s gewesen, wenn du mit den entsprechenden Secure Strings gearbeitet hättest.
Volker Steitz schrieb am 11/22/2007:
Vielleicht baust Du es ja noch ein. Dann gibts bestimmt auch ne Gute Wertung.
Konstantin Gross schrieb am 11/22/2007:
Hallo Herr Steitz,

ich kann das selbstverständlich auch mit SecureStrings machen, das Problem was ich jetzt persönlich sehe ist, dass das Passwort der SecureString Funktion als Klartext übergeben wird. Ich könnte es fest im Code oder eine Textbox übergeben, in beiden Fällen kann man es auslesen. Oder geht es Ihnen hauptsächlich darum das ich das Active Directory unverschlüsselt anspreche?
Volker Steitz schrieb am 11/22/2007:
Hallo Herr Gross,

es ist richtig, dass die Funktion das Kennwort immer noch im Klartext erhält, aber die authentifizierung gegen das LDAP erfolgt dann verschlüsselt. Der Server - der Verzeichnisdienst - befindet sich unhter umständen irgendwo im Campus oder im Metropolitan Netz oder sogar durchs WWW.

Gruß

Volker Steitz
Konstantin Gross schrieb am 11/23/2007:
Hallo Herr Steitz,

ich hab den C# sowie VB.NET Snippet auf den neusten Stand gebracht. Danke nochmals für den Hinweiß.
Volker Steitz schrieb am 11/23/2007:
So iss´es gut.
Jetzt hab auch ich die 10 gedrückt.

Gruß Volker
Konstantin Gross schrieb am 11/23/2007:
Vielen Dank :)
mher schrieb am 4/27/2020:
Hallo, ich bin zimlich neu in VB, habe mal eine Frage dazu? wie rufe ich dann Public Shared Function auf, bzw. wie frage ich das ab. Ich muss mich als Domain Admin anmelden können.
mher schrieb am 4/27/2020:
Bräuchte dringend Hilfe. Sorry aber ich bin neu in VB.NET
Ich bekomme es einfach nicht hin mich an der AD zu Authentifizieren.
Dim RootDSE As New DirectoryEntry("LDAP://RootDSE")
RootDSE.Username = "domänen Admin"
RootDSE.Password = "Passwort"

Dim DomainDN As String = RootDSE.Properties("DefaultNamingContext").Value
Dim ADsearch As New DirectorySearcher("LDAP://" & DomainDN)

Try

ADsearch.Filter = ("(&(objectClass=computer)(name=" & MachineName.Text & "))")

Dim ADresult As SearchResult = ADsearch.FindOne
Dim ADpath As String = ADresult.Path

Dim BTsearch As New DirectorySearcher()
BTsearch.SearchRoot = New DirectoryEntry(ADpath)
BTsearch.Filter = "(&(objectClass=msFVE-RecoveryInformation))"

Dim BitLockers As SearchResultCollection = BTsearch.FindAll()

Dim Item As SearchResult

Dim longTempstring As String = ""

For Each Item In BitLockers
If Item.Properties.Contains("msFVE-RecoveryGuid") Then

Dim tempstring As String = bitread(Item.Properties("msFVE-RecoveryGuid")(0))

longTempstring = longTempstring & tempstring & vbNewLine
ListBox2.Items.Add(bitread(Item.Properties("msFVE-RecoveryGuid")(0)))

End If
If Item.Properties.Contains("msFVE-RecoveryPassword") Then

ListBox1.Items.Add(Item.Properties("msFVE-RecoveryPassword")(0))

End If
Next
'MsgBox(longTempstring)
Catch ex As Exception
MsgBox(ex.Message)
End Try

Danke für Eure Hilfe.

 

Logge dich ein, um hier zu kommentieren!