2009-05-11 14 views
2

Ich versuche, ein Domänenbenutzerkonto in einer WPF-Anwendung zu imitieren, damit die Anwendung in einen Ordner im Netzwerk schreiben kann. Der Domänenbenutzer verfügt über ausreichende Rechte zum Schreiben an diesen Speicherort. Ich verwende einen Code, der auf der net gefunden wurde, um den Identitätswechsel durchzuführen.Imitieren von Domänenbenutzer in WPF - UnauthorizedAccess

Im Grunde ruft es die systemeigene LogonUser-Methode auf, die ein Sicherheitstoken zurückgibt, dann eine neue WindowsIdentity erstellt, die das Token weitergibt, und schließlich die windowsIdentity.Impersonate() -Methode aufruft. Ich bekomme keine Ausnahmen über Logik ausgeführt.

Aufruf von WindowsIdentity.GetCurrent() -> gibt Identität als Identität zurück.

Schreiben in den UNC-Pfad -> UnauthorizedAccess-Ausnahme.

Also, ich überprüfe das Thread.CurrentPrincipal-Objekt, bevor ich versuche, die Datei zu schreiben, dies hat ein GenericPrincipal, und kein WindowsPrincipal mit der imitierte WindowsIdentity.

Also im Start der Anwendung habe ich die AppDomain.CurrentAppDomain.SetPrincipalPolicy PrincipalPolicy.Impersonate.

ich meine Anwendung neu starten ...

Vor meinem Anruf, zum Imitieren ich kann meine eigenen Anmeldeinformationen auf Thread.CurrentPrincipal, die, die sehen, dass ich mit auf meine Entwicklung Maschine anmelden und welche ausgeführt wird mein WPF-Programm.

ich wieder versuchen, die Identitätswechsel-Logik zu laufen, sehe ich wieder die imitierte Identität auf WindowsIdentity.GetCurrent, alles scheint in Ordnung, keine Ausnahmen

jedoch auf Thread.GetCurrentPrincipal ich immer noch meine eigenen Anmeldeinformationen sehen, und wenn ich sehe Bei der AuthenticationType-Eigenschaft gibt es eine UnauthorizedException (die nur im Debugger sichtbar ist, sie wird nicht in die Anwendung geworfen !!). Ich lasse den Code laufen.

Erneut, UnauthorizedAccess beim Versuch, meine Datei auf dem UNC-Speicherort zu schreiben.

Zuletzt habe ich versucht, ein neues WindowsPrincipal mit WindowsIdentity.GetCurrent() zu erstellen, und ich setze es explizit auf Thread.Current, aber das gleiche Ergebnis.

UnauthorizedAccess beim Schreiben in den UNC-Speicherort.

Ich bin Ideen aus :)

Antwort

0

Ist die Maschine mit Netzwerkfreigabe gehören in der Domäne? Haben Sie versucht, mit diesem Domänenkonto auf die Netzwerkfreigabe zuzugreifen? Zum Beispiel mit "Ausführen als ...".

In LogonUser Funktion versuchen LOGON32_LOGON_NETWORK Flag verwenden, wenn Sie Anmeldung ausführen. Auch um zu sehen, ob der Identitätswechsel tatsächlich stattgefunden hat, versuchen Sie, die Überwachung von Logon/Logoff Ereignisse von Sicherheitsrichtlinie zu aktivieren (info link)

+0

Hallo Vadmyst, Vielen Dank für den Vorschlag! Ich habe versucht, die LOGON32_LOGON_NETWORK Flag und die LOGON32_LOGON_NETWORK_CLEARTEXT Flag, Beide ergeben das gleiche Verhalten, unbefugten Zugriff. Die Überwachung auf dem Server, auf den ich zugreifen möchte, zeigt erfolgreiche Anmelde-/Abmeldeereignisse mit dem Domänenkonto, das ich verwende. Wenn ich den Netzwerkordner mit den Anmeldeinformationen des Domänenkontos abbilde, habe ich die volle Kontrolle über den Ordner, Lese-/Schreibzugriff ... –