Wie machst du Identitätswechsel .NET?
Gibt es eine einfache out of the box Weg, um einen Benutzer zu imitieren .NET?
Bisher habe ich mit diese Klasse von code-Projekt für alle meine Identitätswechsel Anforderungen.
Gibt es einen besseren Weg, es zu tun, indem Sie .NET Framework?
Ich habe eine Benutzer-Berechtigung gesetzt wird, (username, Passwort, domain-name), das ist die Identität, die ich brauche, um zu imitieren.
Konnte Sie sein spezifischer? Es gibt Tonnen von Möglichkeiten, zu tun Identitätswechsel aus der box.
InformationsquelleAutor ashwnacharya | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine gute übersicht .NET-Identitätswechsel Konzepte.
Im Grunde werden Sie die Nutzung dieser Klassen, die sind, out of the box in der .NET framework:
Den code können oft langwierige, obwohl, und das ist, warum Sie sehen viele Beispiele, wie die, die Sie verweisen, die versuchen, den Prozess zu vereinfachen.
Link von dem niederländischen Programmierer-blog wurde ausgezeichnet. Viel intuitiver Ansatz, um Identitätswechsel als die anderen vorgestellten Techniken.
InformationsquelleAutor Eric Schoonover
"Identitätswechsel".NETTO Platz bedeutet in der Regel das ausführen von code unter einer bestimmten Benutzer-account. Es ist ein etwas separates Konzept als erste Zugriff auf das Benutzerkonto mit einem Benutzernamen und Passwort, obwohl diese beiden Ideen-pair-Mädchen, zusammen Häufig. Ich werde beschreiben, wie Sie beide, und dann erklären, wie mein SimpleImpersonation - Bibliothek, die verwendet Sie intern.
Identitätswechsel
Den APIs für den Identitätswechsel sind in .NET über die
System.Security.Principal
namespace:Neueren code (.NETTO-4.6+, .NET Core, etc.) sollte in der Regel verwenden
WindowsIdentity.RunImpersonated
, die akzeptiert, dass ein handle auf das Symbol des Benutzerkontos, und klicken Sie dann entweder eineAction
oderFunc<T>
für den code auszuführen.oder
Älteren code verwendet die
WindowsIdentity.Impersonate
Methode zum abrufen einerWindowsImpersonationContext
Objekt. Dieses Objekt implementiertIDisposable
, allgemein so genannt werden sollte, von einemusing
block.Während dieser API immer noch existiert .NET Framework, es sollte im Allgemeinen vermieden werden, und ist nicht verfügbar .NET-Core-oder .NET Standard.
Zugriff auf das Benutzerkonto
Die API für die Nutzung einen Benutzernamen und ein Passwort, um Zugriff auf einen Benutzer-account in Windows ist
LogonUser
- was ist eine native Win32-API. Es gibt zurzeit keine built-in .NET-API für den Aufruf, so muss man in dem resort, P/Invoke.Dies ist der basic-call-definition, aber es gibt viel mehr zu berücksichtigen, um tatsächlich nutzen es in der Produktion:
SecureString
wenn Sie sammeln können, die einen sicher über Tastatureingaben.Die Menge an code zu schreiben, um zu veranschaulichen, all das jenseits dessen ist, was sollte in einer StackOverflow-Antwort, IMHO.
Eine Kombinierte und Einfacher Ansatz
Statt schreiben alle das Sie sich, betrachten Sie mit meinem SimpleImpersonation Bibliothek, die kombiniert Sie die Identitätswechsel-und Benutzer Zugang zu einer einzigen API. Es funktioniert gut, sowohl moderne und ältere Codebasis, mit der gleichen einfachen API:
oder
Beachten Sie, dass es ist sehr ähnlich zu der
WindowsIdentity.RunImpersonated
API, ist aber nicht erforderlich, dass Sie wissen nichts über token verarbeitet.Dies ist die API in der version 3.0.0. Siehe die Projekt-readme für mehr details. Beachten Sie auch, dass eine frühere version der Bibliothek verwendet eine API, mit der
IDisposable
Muster, ähnlichWindowsIdentity.Impersonate
. Die neuere version ist viel sicherer, und beide sind immer noch intern verwendet.Vielen Dank für dieses posting. Jedoch, in der using-Anweisung habe ich versucht, diese Zeile von code-System.Sicherheit.AUFTRAGGEBER.WindowsIdentity.GetCurrent().Namen und das Ergebnis war einfach nur der Benutzername, das ich eingeloggt mit nicht die ein ich an in den Identitätswechsel contructor.
Würden Sie benötigen, um einen anderen login-Typen. Typ 9 bietet nur den Identitätswechsel ausgehenden Netzwerk-Anmeldeinformationen. Getestet habe ich die Typen 2, 3 & 8 aus einer WinForms-app, und Sie tun, richtig aktualisiert wird, wird die aktuelle Prinzipaldatenbank. Man würde annehmen Typen 4 und 5 gelten auch für Dienst-oder batch-Anwendungen. Siehe den link, den ich auf die in der post.
href="http://referencesource.microsoft.com/#mscorlib/system/security/principal/windowsimpersonationcontext.cs#134" >bereits.
"Referenz" - source-code hier zeigt deutlich
Undo
genannt wird, bei der Entsorgung.InformationsquelleAutor Matt Johnson
Dies ist wahrscheinlich das, was Sie wollen:
Aber ich brauche mehr details um Ihnen zu helfen. Sie konnte tun, Identitätswechsel mit einer config-Datei (wenn Sie versuchen, tun dies auf einer Webseite) oder durch die Methode der Dekoratoren (Attribute), wenn es einen WCF-Dienst oder über... erhalten Sie die Idee.
Auch, wenn wir reden über die Identität eines client bezeichnet einen bestimmten Dienst (oder web-app), die Sie benötigen, um den client zu konfigurieren richtig, so dass es leitet die entsprechenden Token.
Schließlich, wenn das, was Sie wirklich wollen, zu tun ist, Delegation, die Sie auch brauchen, um die setup-ANZEIGE korrekt, so dass Benutzer und Maschinen sind für die Delegierung vertraut wird.
Edit:
Werfen Sie einen Blick hier zu sehen, wie die Identität anderer Benutzer, und für die weitere Dokumentation.
Diese funktionierte wie ein Charme
Den link in deinem edit (msdn.microsoft.com/en-us/library/chf6fbt4.aspx - gehen zu Beispiele) ist wirklich das, was ich gesucht habe!
InformationsquelleAutor Esteban Araya
Hier ist meine vb.net Hafen von Matt Johnson ' s Antwort. Ich fügte hinzu, ein enum für die Typen Anmeldung.
LOGON32_LOGON_INTERACTIVE
war der erste enum-Wert, der arbeitete für sql server. Mein connection string war einfach vertraut. Kein Benutzername /Kennwort in der Verbindungszeichenfolge.Müssen Sie mit einem
Using
- Anweisung enthalten einige code ausführen imitiert.InformationsquelleAutor toddmo
Blick mehr Details von meiner vorherigen Antwort
Erstellt habe ich ein nuget-Paket
Nuget
Code auf Github
Beispiel : Sie verwenden können :
Vieuw der vollständige code :
InformationsquelleAutor Cedric Michel
Ich bin mir bewusst, dass ich schon spät für die party, aber ich denke, dass die Bibliothek von Phillip Allan-Harding, es ist das beste für diesen Fall und ähnliche.
Brauchen Sie nur ein kleines Stück code wie diesen:
Hinzufügen und seine Klasse:
.NET (C#) Identitätswechsel mit Netzwerk-Anmeldeinformationen
Meinem Beispiel kann verwendet werden, wenn Sie die imitierten Anmeldung an Netzwerk-Anmeldeinformationen, aber es hat mehr Optionen.
InformationsquelleAutor Federico Navarrete
Können Sie diese Lösung verwenden. (Nuget package)
Der source code ist verfügbar auf : Github:
https://github.com/michelcedric/UserImpersonation
Mehr Details
https://michelcedric.wordpress.com/2015/09/03/usurpation-didentite-dun-user-c-user-impersonation/
InformationsquelleAutor Cedric Michel