Dela via


Gör så här: Personifiera en klient i en tjänst

Genom att personifiera en klient i en WCF-tjänst (Windows Communication Foundation) kan tjänsten utföra åtgärder för klientens räkning. För åtgärder som omfattas av åtkomstkontrollistor (ACL) kontroller, till exempel åtkomst till kataloger och filer på en dator eller åtkomst till en SQL Server-databas, är ACL-kontrollen mot klientanvändarkontot. Det här avsnittet visar de grundläggande steg som krävs för att aktivera en klient i en Windows-domän för att ange en klientpersonifieringsnivå. Ett exempel på detta finns i Personifiera klienten. Mer information om klientpersonifiering finns i Delegering och personifiering.

Kommentar

När klienten och tjänsten körs på samma dator och klienten körs under ett systemkonto (dvs. Local System eller Network Service) kan klienten inte personifieras när en säker session upprättas med tillståndskänsliga säkerhetskontexttoken. Ett WinForms- eller konsolprogram körs vanligtvis under det inloggade kontot, så att kontot kan personifieras som standard. Men när klienten är en ASP.NET sida och den sidan finns i IIS 6.0 eller IIS 7.0 körs klienten som standard under Network Service kontot. Alla bindningar som tillhandahålls av systemet som stöder säkra sessioner använder en tillståndslös säkerhetskontexttoken som standard. Men om klienten är en ASP.NET sida och säkra sessioner med tillståndskänsliga säkerhetskontexttoken används kan klienten inte personifieras. Mer information om hur du använder tillståndskänsliga säkerhetskontexttoken i en säker session finns i Så här skapar du en säkerhetskontexttoken för en säker session.

Aktivera personifiering av en klient från en cachelagrad Windows-token på en tjänst

  1. Skapa tjänsten. En självstudiekurs om den här grundläggande proceduren finns i Komma igång-självstudie.

  2. Använd en bindning som använder Windows-autentisering och skapar en session, till exempel NetTcpBinding eller WSHttpBinding.

  3. När du skapar implementeringen av tjänstens gränssnitt tillämpar du OperationBehaviorAttribute klassen på den metod som kräver klientpersonifiering. Ange egenskapen Impersonation till 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
    

Så här anger du den tillåtna personifieringsnivån på klienten

  1. Skapa tjänstklientkod med hjälp av verktyget ServiceModel-metadataverktyg (Svcutil.exe). Mer information finns i Accessing Services Using a WCF Client (Åtkomst till tjänster med hjälp av en WCF-klient).

  2. När du har skapat WCF-klienten anger du AllowedImpersonationLevel egenskapen för WindowsClientCredential klassen till ett av TokenImpersonationLevel uppräkningsvärdena.

    Kommentar

    Om du vill använda Delegationmåste förhandlad Kerberos-autentisering (kallas ibland multi-leg eller Kerberos i flera steg ) användas. En beskrivning av hur du implementerar detta finns i Metodtips för säkerhet.

    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
    

Se även