Feedback

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

Veröffentlicht von am 21.11.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 

7 Kommentare zum Snippet

Volker Steitz schrieb am 21.11.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 22.11.2007:
Vielleicht baust Du es ja noch ein. Dann gibts bestimmt auch ne Gute Wertung.
Konstantin Gross schrieb am 22.11.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 22.11.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 23.11.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 23.11.2007:
So iss´es gut.
Jetzt hab auch ich die 10 gedrückt.

Gruß Volker
Konstantin Gross schrieb am 23.11.2007:
Vielen Dank :)
 

Logge dich ein, um hier zu kommentieren!