Share via


Procedura: Rappresentare un client in un servizio

La rappresentazione di un client in un servizio Windows Communication Foundation (WCF) consente al servizio di eseguire azioni per conto del client. Per le azioni soggette ai controlli dell'elenco di controllo di accesso (ACL), ad esempio l'accesso a directory e file in un computer o l'accesso a un database SQL Server, il controllo ACL si basa sull'account utente del client. In questo argomento vengono illustrati i passaggi di base necessari che consentono a un client in un dominio Windows di impostare un livello di rappresentazione di client. Per un esempio pratico, vedere Impersonating the Client. Per altre informazioni sulla rappresentazione client, vedere Delega e rappresentazione.

Nota

Quando il client e il servizio sono in esecuzione nello stesso computer e il client è in esecuzione con un account del sistema (ad esempio Local System o Network Service), il client non può essere rappresentato quando viene stabilita una sessione protetta con token del contesto di sicurezza con stato. Un'applicazione Windows Form o console viene in genere eseguita con l'account attualmente connesso che quindi può essere rappresentato per impostazione predefinita. Tuttavia, quando il client è una pagina ASP:NET ospitata in IIS 6.0 o IIS 7.0, il client viene eseguito con l'account Network Service per impostazione predefinita. Tutte le associazioni fornite dal sistema che supportano le sessioni protette utilizzano un token del contesto di sicurezza senza stato per impostazione predefinita. Tuttavia, se il client è una pagina ASP.NET e si utilizzano sessioni protette con token del contesto di sicurezza con stato, non è possibile eseguire la rappresentazione del client. Per altre informazioni sull'uso di token del contesto di protezione con stato in una sessione protetta, vedere Procedura: Creare un token di contesto di protezione per una sessione sicura.

Per consentire la rappresentazione di un client da un token di Windows memorizzato nella cache in un servizio

  1. Creare il servizio. Per un'esercitazione su questa procedura di base, vedere Getting Started Tutorial.

  2. Utilizzare un'associazione che utilizza l'autenticazione di Windows e che crea una sessione, ad esempio NetTcpBinding o WSHttpBinding.

  3. Quando si crea l'implementazione dell'interfaccia del servizio, applicare la classe OperationBehaviorAttribute al metodo che richiede la rappresentazione del client. Impostare la proprietà Impersonation su 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
    

Per impostare il livello di rappresentazione consentito nel client

  1. Creare un codice client del servizio tramite ServiceModel Metadata Utility Tool (Svcutil.exe). Per altre informazioni, vedere Accesso ai servizi tramite un client WCF.

  2. Dopo la creazione del client WCF, impostare la proprietà AllowedImpersonationLevel della classe WindowsClientCredential su uno dei valori di enumerazione di TokenImpersonationLevel.

    Nota

    Per usare Delegation, deve essere usata l'autenticazione Kerberos negoziata, a volte denominata multifase o in più passaggi . Per la descrizione di come implementare questa funzionalità, vedere Procedure consigliate per la sicurezza.

    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
    

Vedi anche