Sprache: VB
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
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
Alte URL:
/snippet/ldap-authentifizieren-eines-benutzers-in-der-domaene/687
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.
Vielleicht baust Du es ja noch ein. Dann gibts bestimmt auch ne Gute Wertung.
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?
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
Hallo Herr Steitz,
ich hab den C# sowie VB.NET Snippet auf den neusten Stand gebracht. Danke nochmals für den Hinweiß.
So iss´es gut.
Jetzt hab auch ich die 10 gedrückt.
Gruß Volker
Vielen Dank 🙂
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.
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.