Partager via


Comment : restreindre l'accès à l'aide de la classe PrincipalPermissionAttribute

Le contrôle de l'accès aux ressources sur un ordinateur de domaine Windows est une tâche de sécurité de base. Par exemple, certains utilisateurs doivent pouvoir consulter des données sensibles, telles que les informations relatives aux salaires. Cette rubrique explique comment restreindre l'accès à une méthode en exigeant que l'utilisateur appartienne à un groupe prédéfini. Pour obtenir un exemple fonctionnel, consultez Authorizing Access to Service Operations.

La tâche se compose de deux procédures séparées. La première crée le groupe et le remplit avec les utilisateurs. La deuxième applique la classe PrincipalPermissionAttribute pour spécifier le groupe.

Pour créer un groupe Windows

  1. Ouvrez la console Gestion de l'ordinateur.

  2. Dans le panneau gauche, cliquez sur Utilisateurs et groupes locaux.

  3. Cliquez avec le bouton droit sur Groupes, puis sur Nouveau groupe.

  4. Dans la zone Nom du groupe, tapez un nom pour le nouveau groupe.

  5. Dans la zone Description, tapez une description du nouveau groupe.

  6. Pour ajouter de nouveaux membres au groupe, cliquez sur Ajouter.

  7. Si vous vous êtes vous-même ajouté au groupe et souhaitez tester le code suivant, vous devez vous déconnecter, puis vous reconnecter à l'ordinateur pour être inclus dans le groupe.

Pour demander l'appartenance des utilisateurs

  1. Ouvrez le fichier de code Windows Communication Foundation (WCF) qui contient le code de contrat de service implémenté. Pour plus d'informations sur l'implémentation d'un contrat, consultez Implémentation de contrats de service.

  2. Appliquez l'attribut PrincipalPermissionAttribute à chaque méthode qui doit être restreinte à un groupe spécifique. Affectez Demand à la propriété Action et le nom du groupe à la propriété Role. Par exemple :

    ms731200.note(fr-fr,VS.90).gifRemarque :
    Si vous appliquez l'attribut PrincipalPermissionAttribute à un contrat, une exception SecurityException sera levée. Vous pouvez appliquer l'attribut uniquement au niveau de la méthode.

Utilisation d'un certificat pour contrôler l'accès à une méthode

Vous pouvez également utiliser la classe PrincipalPermissionAttribute pour contrôler l'accès à une méthode si le type d'informations d'identification du client est un certificat. Pour ce faire, vous devez avoir l'empreinte numérique et le sujet du certificat.

Pour examiner les propriétés d'un certificat, consultez Comment : afficher des certificats à l'aide du composant logiciel enfichable MMC. Pour rechercher la valeur d'empreinte numérique, consultez Comment : récupérer l'empreinte numérique d'un certificat.

Pour contrôler l'accès à l'aide d'un certificat

  1. Appliquez la classe PrincipalPermissionAttribute à la méthode à laquelle vous souhaitez restreindre l'accès.

  2. Affectez System.Security.Permissions.SecurityAction.Demand à l'action de l'attribut.

  3. Affectez à la propriété Name une chaîne qui se compose du nom du sujet et de l'empreinte numérique du certificat. Séparez les deux valeurs par un point-virgule et un espace, tel qu'indiqué dans l'exemple suivant :

  4. Affectez UseAspNetRoles à la propriété PrincipalPermissionMode, tel qu'indiqué dans l'exemple de configuration suivant :

    <behaviors>
      <serviceBehaviors>
      <behavior name="SvcBehavior1">
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />
      </behavior>
      </serviceBehaviors>
    </behaviors>
    

    L'affectation de UseAspNetRoles à cette valeur indique que la propriété Name de PrincipalPermissionAttribute sera utilisée pour effectuer une comparaison de chaînes. Lorsqu'un certificat est utilisé en tant qu'information d'identification du client, WCF concatène par défaut l'empreinte numérique et le nom commun du certificat à un point-virgule pour créer une valeur unique pour l'identité principale du client. Avec UseAspNetRoles défini en tant que PrincipalPermissionMode sur le service, la valeur de cette identité principale est comparée à celle de la propriété Name afin de déterminer les droits d'accès de l'utilisateur.

    Vous pouvez également, lorsque vous créez un service auto-hébergé, définir la propriété PrincipalPermissionMode dans le code, tel qu'indiqué dans le code suivant :

Voir aussi

Référence

PrincipalPermissionAttribute
PrincipalPermissionAttribute
Demand
Role

Concepts

Vue d'ensemble de la sécurité
Implémentation de contrats de service

Autres ressources

Authorizing Access to Service Operations