Condividi tramite


Autorizzazione dell'accesso alle operazioni del servizio

In questo esempio viene illustrato come usare <serviceAuthorization> e abilitare l'uso dell'attributo PrincipalPermissionAttribute per autorizzare l'accesso alle operazioni del servizio. Questo esempio è basato sull'esempio dell’Introduzione. Il servizio e il client sono stati configurati usando <wsHttpBinding>. L'attributo mode di <sicurezza> è stato impostato su Message e clientCredentialType è stato impostato su Windows. PrincipalPermissionAttribute viene applicato a ogni metodo del servizio e usato per limitare l'accesso alle operazioni. Il chiamante deve essere un amministratore Windows per accedere a tutte le operazioni.

In questo esempio, il client è un'applicazione console (.exe) e il servizio è ospitato da Internet Information Services (IIS).

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

Il file di configurazione del servizio usa <serviceAuthorization> per impostare l'attributo principalPermissionMode:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

L'impostazione della principalPermissionMode su UseWindowsGroups abilita l'uso di PrincipalPermissionAttribute basato sui nomi dei gruppi di Windows.

PrincipalPermissionAttribute viene applicato a ogni operazione per richiedere che il chiamante appartenga al gruppo Administrators di Windows, come illustrato nell'esempio di codice seguente.

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Il client comunica correttamente con ogni operazione se viene eseguito con un account che appartiene al gruppo Administrators. In caso contrario, l'accesso viene negato. Per sperimentare un errore di autorizzazione, eseguire il client con un account che non appartiene al gruppo Administrators. Premere INVIO nella finestra della console per arrestare il client.

Un servizio può ricevere una notifica di errori di autorizzazione implementando un IErrorHandler. Per informazioni sull'implementazione di IErrorHandler, vedere Estensione del controllo sulla gestione degli errori e sulla creazione di report.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.

  3. Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.