
In Wirklichkeit debugge ich eine C#-App, aber da der gleiche Befehl in PowerShell möglich ist, versuche ich es dort.
Ich versuche, Benutzerkonten mithilfe des Folgenden in PowerShell zu validieren:
> Add-Type -AssemblyName System.DirectoryServices.AccountManagement
> $ds = New-Object System.DirectoryServices.AccountManagement.PrincipalContext("domain", "<domain>", "<OuDN>", "negotiate", "<username>", "<password>")
> $ds.ValidateCredentials("<username>", "<password>", "negotiate")
Der letzte Befehl gibt immer „false“ zurück. Ich habe überprüft, dass die Anmeldeinformationen korrekt sind, indem ich mich mit ihnen angemeldet habe. Wir haben die NTLM-Authentifizierung in der Umgebung deaktiviert, und ich kann jedes Mal sehen, dass ValidateCredentials()
eine NTLM-Verbindung, die ich ausführe, von lsass.exe blockiert wird (Ereignis-ID 4002 in der Ereignisanzeige). Ich habe die Kerberos-Protokollierung aktiviert, aber beim Validierungsversuch werden in der Ereignisanzeige keine Ereignisse generiert. Dies lässt mich glauben, dass es nicht einmal versucht, eine Kerberos-Authentifizierung durchzuführen, aber ich könnte mich hier irren.
Ich habe mit überprüft, ob SPNs für den Computer vorhanden sind setspn -L
, und da die Kerb-Authentifizierung überall sonst im System funktioniert, bin ich nicht sicher, ob es sich um eine Fehlkonfiguration handelt.
Aktualisieren:
Ich habe eine Lösung gefunden, sie aber noch nicht als Antwort gepostet, da bei mir immer noch ein seltsames Verhalten auftritt. Ich habe @<domain>
den Benutzernamen hinzugefügt und dies funktioniert in der C#-App, die ich debugge, aber wenn ich genau denselben Befehl in PowerShell ausführe, wird immer noch „false“ zurückgegeben, obwohl ich jetzt ein KDC_ERR_PREAUTH_FAILED
in der Ereignisanzeige bekomme.