Tipps und Tricks rund um .NET und Visual Studio

Windows Communication Foundation Programmatische und Deklarative Impersonation
Kommentare

In diesem Teil der Reihe „.NETversum“ widmen sich Holger Schwichtenberg und Manfred Steyer der Windows Communication Foundation und gehen dabei auf Programmatische Impersonation, Deklarative Impersonation und Impersonation für alle Operationen ein.

Programmatische Impersonation

Wird Windows-Sicherheit verwendet, besteht die Möglichkeit, die Serviceoperation teilweise oder vollständig unter dem Benutzerkonto des Aufrufers auszuführen. Dies nennt man auch Impersonation. Um das programmatisch zu bewerkstelligen, ist die aktuelle WindowsIdentity zu ermitteln und anschließend dessen Methode Impersonate aufzurufen. Nach einem Aufruf von Dispose wird die Impersonation wieder beendet (Listing 5).

Listing 5

var winIdentity = 
       System.Threading.Thread.CurrentPrincipal.Identity as WindowsIdentity;
using (winIdentity.Impersonate())
{
   [...]
}  

Deklarative Impersonation

Um deklarativ festzulegen, dass der Aufrufer für die Dauer der Abarbeitung einer Servicemethode impersoniert werden soll, wird die Eigenschaft Impersonation des Attributs OperationBehavior auf Required gesetzt. Um Impersonation zu erlauben aber nicht zu erzwingen, kommt Allowed zum Einsatz, um es zu verbieten hingegen NotAllowed. Zur Realisierung von Impersonationsszenarien muss der Aufrufer auch seine Zustimmung geben. Dazu wird die Eigenschaft ClientCredentials.Windows.AllowedImpersonationLevel des Proxys auf Impersonation oder Delegation gesetzt:

proxy = new FlugService.FlugServiceClient();
proxy.ClientCredentials.Windows.AllowedImpersonationLevel = 
                                TokenImpersonationLevel.Impersonation;  

Der Unterschied zwischen diesen beiden Optionen liegt darin, dass bei Verwendung von Delegation die Identität an weitere Services weitergereicht werden kann, die den ursprünglichen Benutzer ebenfalls impersonieren. Da dabei nicht sicher ist, welche Services in dieser Aufrufkette die Identität des Benutzers erlangen, ist diese Spielart mit Vorsicht zu genießen. Damit Delegation verwendet werden kann, muss Windows-Security über Kerberos realisiert werden.

Listing 6

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List FindFlights(string von, string nach, DateTime datum) 
{
    [...]
}  

Impersonation für alle Operationen festlegen

Mit WCF kann festgelegt werden, dass alle Operationen impersoniert, sprich unter der Identität des Aufrufers ausgeführt werden sollen. Dazu wird die Eigenschaft impersonateCallerForAllOperations des Service-Bahaviors serviceAuthorization auf true gesetzt (Listing 7).

Listing 7


  
    
      [...]
            
    
  
  

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer arbeiten bei www.IT-Visions.de als Softwarearchitekten, Berater und Trainer für .NET-Technologien. Dabei unterstützen Sie zahlreiche Unternehmen beim Einsatz von .NET und entwickeln selbst in größeren Projekten. Sie haben zahlreiche Fachbücher geschrieben und gehören seit vielen Jahren zu den Hauptsprechern auf der BASTA. Manfred Steyer ist zudem verantwortlich für den Fachbereich „Software Engineering“ der Studienrichtung „IT und Wirtschaftsinformatik“ an der FH CAMPUS 02 in Graz. Dr. Holger Schwichtenberg unterrichtet in Lehraufträgen an den Fachhochschulen Münster und Graz.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -