Condividi tramite


Procedura: Eseguire l'impersonificazione di un cliente su 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 a controlli dell'elenco di controllo di accesso (ACL), come l'accesso a directory e file su un computer o l'accesso a un database di SQL Server, il controllo ACL viene effettuato sull'account utente del client. In questo argomento vengono spiegati i passaggi di base necessari per consentire a un client in un dominio Windows di impostare un livello di impersonificazione. Per un esempio funzionante, vedere Impersonificazione del client. Per ulteriori informazioni sull'impersonificazione del client, vedere Delega e impersonificazione.

Annotazioni

Quando il client e il servizio sono in esecuzione nello stesso computer e il client è in esecuzione con un account di sistema (ovvero Local System o Network Service), il client non può essere impersonato quando viene stabilita una sessione protetta con token contestuali di sicurezza con stato. Un'applicazione WinForms o console viene in genere eseguita con l'account attualmente connesso, in modo che l'account possa essere rappresentato per impostazione predefinita. Tuttavia, quando il client è una pagina ASP.NET e tale pagina è ospitata in IIS 6.0 o IIS 7.0, il client viene eseguito con l'account Network Service per impostazione predefinita. Per impostazione predefinita, tutte le associazioni fornite dal sistema, che supportano le sessioni sicure, usano un token contestuale di sicurezza senza stato. Tuttavia, se il client è una pagina ASP.NET e vengono utilizzate sessioni sicure con token contestuali di sicurezza con stato, il client non può essere sostituito. Per altre informazioni sull'uso di token del contesto di sicurezza con stato in una sessione protetta, vedere Procedura: Creare un token di contesto di sicurezza per una sessione sicura.

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

  1. Creare il servizio. Per un'esercitazione di questa procedura di base, vedere Esercitazione introduttiva.

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

  3. Quando si crea l'implementazione dell'interfaccia del servizio, applicare la OperationBehaviorAttribute classe al metodo che richiede l'impersonificazione 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 impersonificazione consentito nel client

  1. Creare il codice client del servizio usando l'strumento di utilità per i metadati di ServiceModel (Svcutil.exe). Per altre informazioni, vedere Accesso ai servizi tramite un client WCF.

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

    Annotazioni

    Per usare Delegation, è necessario utilizzare l'autenticazione Kerberos negoziata (talvolta denominata Kerberos a più passaggi o a più fasi). Per una 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
    

Vedere anche