Authorizing Access to Service Operations

Cet exemple illustre comment utiliser l’élément <serviceAuthorization> pour permettre l’utilisation de l’attribut PrincipalPermissionAttribute et ainsi autoriser l’accès aux opérations de service. Cet exemple est basé sur l’exemple Getting Started. Le service et le client sont configurés à l’aide du <wsHttpBinding>. L’attribut mode de <security> a la valeur Message et clientCredentialType a la valeur Windows. L'attribut PrincipalPermissionAttribute est appliqué à chaque méthode de service et utilisé afin de restreindre l'accès à chaque opération. L'appelant doit être un administrateur Windows pour pouvoir accéder à chaque opération.

Dans cet exemple, le client est une application console (.exe) et le service est hébergé par les services IIS (Internet Information Services).

Notes

La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

Le fichier de configuration du service utilise <serviceAuthorization> pour définir l’attribut 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>

Affecter au principalPermissionMode la valeur UseWindowsGroups permet d'utiliser l'attribut PrincipalPermissionAttribute en fonction des noms de groupe Windows.

L'attribut PrincipalPermissionAttribute est appliqué à chaque opération, indiquant que l'appelant doit appartenir à un groupe Administrateurs Windows, tel qu'illustré dans l'exemple de code suivant.

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

Lorsque vous exécutez l'exemple, les demandes et réponses d'opération s'affichent dans la fenêtre de console du client. Le client parvient à communiquer avec chaque opération s'il s'exécute sous un compte appartenant à un groupe Administrateurs. Dans le cas contraire, l'accès aux opérations lui sera refusé. Faites l'expérience de ce genre d'échec en exécutant le client sous un compte n'appartenant pas à un groupe Administrateurs. Appuyez sur ENTER dans la fenêtre de console pour arrêter le client.

Les services peuvent être informés des échecs d'autorisation en implémentant un IErrorHandler. Consultez Extension du contrôle sur la gestion et le rapport des erreurs pour plus d’informations sur l’implémentation de IErrorHandler.

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.

  3. Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions figurant dans Exécution des exemples Windows Communication Foundation.