Ich verwende HostingEnvironment.QueueBackgroundWorkItem
, um die Arbeit im Hintergrund einer ASP.Net-Anwendung auszuführen, basierend auf Scott Hanselmans Blogpost So führen Sie Hintergrundaufgaben in ASP.NET aus .
Ich möchte die Hintergrundaufgabe als aktuelle Benutzeridentität ausführen. Ich habe versucht, ein WindowsPrincipal zu übergeben und Thread.CurrentPrincipal in der Aktion zu setzen, aber dies führte nicht dazu, dass die Aktion als aktueller Benutzer ausgeführt wurde.
Ist das möglich, oder bedeutet das Verwenden von HostingEnvironment immer das Ausführen als App-Pool-Identität?
Bearbeiten
Nicht genau auf meine ursprüngliche Frage, aber ich habe auch versucht, einen Wert über CallContext.LogicalSetData () und CallContext.LogicalGetData () zu übergeben. Auf der Get-Seite ist der Wert immer null.
Bearbeiten Sie # 2
Dies wurde auch auf der Warteschlangenseite versucht:
%Vor%Wenn die Arbeit tatsächlich erledigt ist, ist die aktuelle WindowsIdentity in der Aktion immer noch die App-Pool-Identität.
Die Identität des aktuellen Benutzers ist dem Thread zugeordnet, der die Anfrage bearbeitet, und ist nur für die Gültigkeitsdauer dieser Anfrage gültig. Selbst wenn Sie einen Verweis auf HttpContext.Current.User.Identity
an Ihre Worker-Funktion übergeben haben, würden Sie feststellen, dass sie möglicherweise nicht mehr gültig ist, wenn Sie versuchen, sie zu verwenden. Soweit ich das beurteilen kann, müssen Sie ein wenig mit der Windows-API arbeiten, um das Identitätstoken zu klonen, um eine neue WindowsIdentity
zu erstellen, die Sie dann in Ihrer Hintergrundaufgabe verwenden können. So etwas wie das:
Übergeben Sie diese WindowsIdentity
an Ihre Hintergrundaufgabe und geben Sie sie bei Bedarf als Identität aus. Vergiss nicht, es zu entsorgen.
Tags und Links c# asp.net impersonation