Condividi tramite


Autorizzazione dell'accesso alle operazioni del servizio

In questo esempio viene illustrato come utilizzare l'elemento <serviceAuthorization> element per abilitare l'utilizzo dell'attributo PrincipalPermissionAttribute per autorizzare l'accesso alle operazioni del servizio. L'esempio è basato sull'esempio Esempio della guida introduttiva. Il servizio e il client sono stati configurati utilizzando wsHttpBinding Element. L'attributo mode di Security element è stato impostato su Message e clientCredentialType è stato impostato su Windows. PrincipalPermissionAttribute viene applicato a ogni metodo del servizio e utilizzato 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).

ms752243.note(it-it,VS.100).gifNota:
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine dell'argomento.

Il file di configurazione del servizio utilizza <serviceAuthorization> element 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'utilizzo 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. Vedere Estensione del controllo sulla gestione e sulla segnalazione degli errori per informazioni sull'implementazione di IErrorHandler.

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 C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.

  3. Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Running the Windows Communication Foundation Samples.