Partager via


Comment : créer une stratégie d'autorisation personnalisée

L'infrastructure de modèle d'identité dans Windows Communication Foundation (WCF) prend en charge un modèle d'autorisation basé sur les revendications. Les revendications, une fois extraites des jetons, sont traitées par une stratégie d'autorisation personnalisée lorsqu'une telle stratégie a été définie, puis placées dans un AuthorizationContext, lequel peut ensuite être examiné afin de délivrer ou non les autorisations. Il est possible d'utiliser une stratégie personnalisée afin de transformer les revendications émanant des jetons entrants en revendications escomptées par l'application. De cette façon, les détails des différentes revendications provenant des différents types de jetons pris en charge par WCF sont épargnés à l'application. Cette rubrique contient des instructions permettant d'implémenter une stratégie d'autorisation personnalisée et d'ajouter celle-ci à la collection de stratégies utilisées par un service donné.

Pour implémenter une stratégie d'autorisation personnalisée

  1. Définissez une nouvelle classe dérivée de IAuthorizationPolicy.

  2. Implémentez la propriété Id en lecture seule en générant une chaîne unique dans le constructeur de la classe et en faisant en sorte que cette chaîne soit retournée à chaque accès à la propriété.

  3. Implémentez la propriété Issuer en lecture seule en retournant un ClaimSet qui représente l'émetteur de la stratégie. Il peut s'agir d'un ClaimSet qui représente l'application ou d'un ClaimSet intégré (par exemple, le ClaimSet retourné par la propriété System statique).

  4. Implémentez la méthode Evaluate comme décrit dans la procédure suivante.

Pour implémenter la méthode d'évaluation

  1. Deux paramètres sont passés à cette méthode : une instance de la classe EvaluationContext ainsi qu'une référence d'objet.

  2. Si la stratégie d'autorisation personnalisée ajoute des instances ClaimSet indépendamment du contenu actuel du EvaluationContext, ajoutez alors chaque ClaimSet en appelant la méthode AddClaimSet, puis retournez la valeur true depuis la méthode Evaluate. Le renvoi de la valeur true indique à l'infrastructure d'autorisation que la stratégie d'autorisation a terminé son travail et qu'il n'est plus nécessaire de l'appeler.

  3. Si la stratégie d'autorisation personnalisée ajoute des ensembles de revendications uniquement lorsque des revendications sont déjà présentes dans le EvaluationContext, recherchez ces revendications en examinant les instances ClaimSet retournées par la propriété ClaimSets. Si des revendications sont déjà présentes, ajoutez les nouveaux ensembles de revendications en appelant la méthode AddClaimSet, puis, lorsqu'il n'y a plus d'ensembles de revendications à ajouter, retournez la valeur true afin d'indiquer à l'infrastructure d'autorisation que la stratégie d'autorisation a terminé son travail. En l'absence de revendications, retournez la valeur false afin d'indiquer que la stratégie d'autorisation doit encore être appelée lorsque d'autres stratégies d'autorisation souhaitent ajouter de nouveaux ensembles de revendications au EvaluationContext.

  4. Lorsque les autorisations nécessitent un traitement plus complexe, notamment une évaluation particulière, le second paramètre de la méthode Evaluate est utilisé pour stocker une variable d'état que l'infrastructure d'autorisation repasse à chaque nouvel appel de la méthode Evaluate.

Pour spécifier une stratégie d'autorisation personnalisée dans le fichier de configuration

  1. Spécifiez le type de la stratégie d'autorisation personnalisée dans l'attribut policyType de l'élément add de l'élément authorizationPolicies de l'élément serviceAuthorization.

    <configuration>
     <system.serviceModel>
      <behaviors>
        <serviceAuthorization serviceAuthorizationManagerType=
                  "Samples.MyServiceAuthorizationManager" >
          <authorizationPolicies>       
            <add policyType="Samples.MyAuthorizationPolicy"
          </authorizationPolicies>
        </serviceAuthorization>
      </behaviors>
     </system.serviceModel>
    </configuration>
    

Pour spécifier une stratégie d'autorisation personnalisée dans le code

  1. Créez une liste List de IAuthorizationPolicy.

  2. Créez une instance de la stratégie d'autorisation personnalisée.

  3. Ajoutez l'instance de la stratégie d'autorisation à la liste.

  4. Répétez les étapes 2 et 3 pour chaque stratégie d'autorisation personnalisée à ajouter.

  5. Assignez une version en lecture seule de la liste à la propriété ExternalAuthorizationPolicies.

Exemple

Dans l'exemple suivant, la stratégie IAuthorizationPolicy est implémentée de manière exhaustive.

Voir aussi

Référence

ServiceAuthorizationManager

Autres ressources

How To: Compare Claims
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample