ASP.NET Threading – Impersonate
1. August 2010 von Hendrik Schreiber
In ASP.NET Anwendung (VB.NET z.B. als Programmiersprache im Hintergrund) kann auf einfache Weise Multithreading verwendet werden. Wichtig ist dabei zu wissen, dass die geöffneten Threads unter bestimmten Voraussetzungen nicht unter dem selben Benutzer laufen, wie die ASP.NET Anwendung. Dies ist u.A. der Fall, wenn die ASP.NET – Anwendung unter einem bestimmten Nutzer ausgeführt werden soll (Siehe dazu auch MSDN – Impersonate). Dies wird in der Web.config festgelegt:
<identity impersonate="true"
userName="domain\user"
password="password" />
Mit diesem Nutzer wird dann auch der VB.NET – Code ausgeführt. So ist u.A. eine Authentifizierung an einer Datenbank über einen Windowsnutzer möglich. Wenn nun ein Thread gestartet wird, läuft dieser nicht direkt unter dem in der Web.config angegebenen Nutzer, sondern unter dem Nutzer ASPNET. Um den Thread auch unter dem aktuellen Nutzer auszuführen, muss dieser an den Thread übergeben werden. Der aktuelle Nutzer wird so ermittelt:
Dim identity As System.Security.Principal.WindowsIdentity = _
System.Security.Principal.WindowsIdentity.GetCurrent
Diese Variable kann dann im Thread benutzt werden, um einen Code-Abschnitt mit dem ursprünglichen Nutzer auszuführen:
m_identity.Impersonate()
