Revision der Benutzeridentität in .NET - Was ist eine gute Strategie?
Frage
Ich bin sicher, es ist eine Anforderung viele Entwickler konfrontiert vor. Geschäft einen Audit-Trail muss wissen, wer Aktionen in ihrem System durchführt
Unabhängig davon, wie Sie die geprüfte Information wählen speichern, wobei der Kern des Problems ist, wie der aktuellen Benutzer zu identifizieren.
Ich mag Komponenten schreiben, von kleinen Domäne Modellklassen zu Servicekomponenten, die alle, die sicher von einem der folgenden Host-Anwendungen aufgerufen werden können:
- Ein Windows-Desktop-Anwendung.
- Eine ASP.NET-Website in IIS gehostet wird.
- Ein WCF-Dienst in IIS gehostet wird.
- Ein WCF-Dienst in Windows-Dienst gehostet werden.
die Reihe von Technologien, die verschiedenen Authentifizierungsmodelle gegeben und für das Konzept einer „anonymen“ Benutzer-Konto hat, bin ich nicht klar, auf einer Strategie, um die Identität zu erhalten, zu verwenden wer meine Komponente in einer zentralisierten Weise aufgerufen .
Kann jeder von euch Smart Volk schlägt einen Ansatz, um dies zu bewältigen?
Lösung
Ich würde in der Regel verlangt, dass Anträge Thread.CurrentPrincipal
zu einer Haupt, deren Identität repräsentiert den aktuellen Benutzer festgelegt. Dies kann beim Start der Anwendung durchgeführt werden (mit WindowsIdentity.GetCurrent ()) in einem Client (WinForms oder Konsole) App von HttpContext.Current.User oder Roles.GetCurrentUser () in einer ASP.NET oder WCF-Anwendung in IIS gehostet, usw. .
Dann in der unteren Ebene Komponenten, die Sie einfach Thread.CurrentPrincipal.Identity
für die Prüfung verwendet werden.
Bearbeiten
. (Als Reaktion auf Kommentar) - beachten Sie, dass Thread.CurrentPrincipal.Identity
hat nichts mit dem Sicherheitskontext des Threads zu tun: dies durch das Windows vertreten ist und abgerufen werden kann WindowsIdentity.GetCurrent
mit und geändert WindowsIdentity.Impersonate
mit
Andere Tipps
Der beste Ansatz, um die aktuellsten Techniken verwenden, ist wahrscheinlich Windows zu verwenden Identity Foundation .
WIF ist so konzipiert, Benutzeridentitätsfragen über mehrere Technologien behandeln .NET.