Procedure: Een client op een service imiteren
Door een client in een WCF-service (Windows Communication Foundation) te imiteren, kan de service acties uitvoeren namens de client. Voor acties die onderhevig zijn aan ACL-controles (Access Control List), zoals toegang tot mappen en bestanden op een computer of toegang tot een SQL Server-database, is de ACL-controle gericht op het clientgebruikersaccount. In dit onderwerp worden de basisstappen beschreven die nodig zijn om een client in een Windows-domein in te schakelen om een clientimitatieniveau in te stellen. Zie Voor een werkend voorbeeld hiervan het imiteren van de client. Zie Delegatie en imitatie voor meer informatie over clientimitatie.
Notitie
Wanneer de client en service worden uitgevoerd op dezelfde computer en de client wordt uitgevoerd onder een systeemaccount (dat wil gezegd, Local System
of Network Service
), kan de client niet worden geïmiteerd wanneer een beveiligde sessie tot stand wordt gebracht met stateful security context tokens. Een WinForms- of consoletoepassing wordt doorgaans uitgevoerd onder het momenteel aangemelde account, zodat het account standaard kan worden geïmiteerd. Wanneer de client echter een ASP.NET pagina is en die pagina wordt gehost in IIS 6.0 of IIS 7.0, wordt de client standaard uitgevoerd onder het Network Service
account. Alle door het systeem geleverde bindingen die beveiligde sessies ondersteunen, gebruiken standaard een stateless Security Context-token. Als de client echter een ASP.NET pagina is en beveiligde sessies met stateful beveiligingscontexttokens worden gebruikt, kan de client niet worden geïmiteerd. Zie How to: Create a Security Context Token for a Secure Session (Een beveiligingcontexttoken maken voor een beveiligde sessie) voor meer informatie over het gebruik van stateful security contexttokens in een beveiligde sessie.
Imitatie van een client inschakelen vanuit een Windows-token in de cache op een service
De service maken. Zie De zelfstudie Aan de slag voor een zelfstudie over deze basisprocedure.
Gebruik een binding die gebruikmaakt van Windows-verificatie en maakt een sessie, zoals NetTcpBinding of WSHttpBinding.
Wanneer u de implementatie van de interface van de service maakt, past u de OperationBehaviorAttribute klasse toe op de methode waarvoor clientimitatie is vereist. Stel de eigenschap Impersonation in op Required.
[OperationBehavior(Impersonation=ImpersonationOption.Required)] public double Add(double a, double b) { return a + b; }
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _ Public Function Add(ByVal a As Double, ByVal b As Double) As Double _ Implements ICalculator.Add Return a + b End Function
Het toegestane imitatieniveau instellen op de client
Maak serviceclientcode met behulp van het hulpprogramma ServiceModel Metadata Utility (Svcutil.exe). Zie Toegang tot services met behulp van een WCF-client voor meer informatie.
Nadat u de WCF-client hebt gemaakt, stelt u de AllowedImpersonationLevel eigenschap van de WindowsClientCredential klasse in op een van de TokenImpersonationLevel opsommingswaarden.
Notitie
Voor gebruik Delegationmoeten onderhandelde Kerberos-verificatie (ook wel Multi-Leg of Multi-Step Kerberos genoemd) worden gebruikt. Zie Aanbevolen procedures voor beveiliging voor een beschrijving van hoe u dit implementeert.
CalculatorClient client = new CalculatorClient("CalculatorEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Dim client As New CalculatorClient("CalculatorEndpoint") client.ClientCredentials.Windows.AllowedImpersonationLevel = _ System.Security.Principal.TokenImpersonationLevel.Impersonation