Ich will testen ob ein Password für den Windows Benutzer was der Benutzer eingegeben hat richtig ist.
über
string entryString = "WinNT://" + Environment.MachineName + ",computer";
DirectoryEntry dirEntry = new DirectoryEntry(entryString);
try
{
DirectoryEntry user = dirEntry.Children.Find(userName, "user");
Komm ich an den User. Ich will das nun aber ungern über
user.Invoke("ChangePassword", new object[] {
testen. Wie könnte man das noch überprüfen?
Danke
-- Daniel
Hallo!
Ein Konstruktor von DirectoryEntry nimmt als Parameter Benutzername und Passwort. Vielleicht genügt es zu versuchen so ein DirectoryEntry-Objekt zu erstellen.
LG
Leider kann ich dir da nicht helfen und ich weis auch nicht genau was du vor hast, aber bevor du dir ein Sicherheitssystem selbst zusammen bastelst, muss ich Fragen ob .Net Security deinen Ansprüchen nicht von Haus aus genügt.
As a man thinketh in his heart, so he is.
Huhu,
Ein Konstruktor von DirectoryEntry nimmt als Parameter Benutzername und Passwort. Vielleicht genügt es zu versuchen so ein DirectoryEntry-Objekt zu erstellen.
Erstellen wird nicht gehen, da dies ja auch per Security verboten sein kann.
🙂
Xynratron
Edit: Abfragen sollte reichen.
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Was ich vor hab ist den Benutzer einen Windows user definieren zu lassen mit dem später ein Windows Service ausgeführt werden soll. Da diser zugriff auf bestimmte resourcen benötigt, kann der Service nicht als Local System oder änliches laufen.
@Xynratron was meinst du mit Abfragen sollte reichen?
Man könnte es auch über die Win32 API lösen
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken
);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hHandle);
private void button4_Click(object sender, EventArgs e)
{
IntPtr hToken = IntPtr.Zero;
if (LogonUser("Benutzer", "Domaine", "Kennwort", 2, 0, out hToken))
Console.WriteLine("OK");
else
Console.WriteLine("Nicht OK");
if (hToken != IntPtr.Zero)
CloseHandle(hToken);
}
Wichtig dabei ist es, den Handle wieder zu schließen (hToken).
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)