Demande d'autorisations

Mise à jour : novembre 2007

La demande d'autorisation est la façon dont vous indiquez au runtime ce que votre code doit être autorisé à faire. Vous demandez des autorisations pour un assembly en plaçant des attributs (syntaxe déclarative) dans la portée de l'assembly de votre code. Lorsque l'assembly est créé, le compilateur de langage stocke les autorisations demandées dans le manifeste d'assembly. Au moment du chargement, le runtime examine les demandes d'autorisation et applique les règles de la stratégie de sécurité afin de déterminer les autorisations à octroyer à l'assembly. Les demandes influencent le runtime uniquement pour refuser des autorisations à votre code et jamais pour lui en donner plus. La stratégie d'administration locale a toujours le contrôle final sur les autorisations maximales accordées à votre code.

Bien que votre code n'ait pas besoin de demander des autorisations pour la compilation, il existe des raisons importantes pour lesquelles il doit toujours en demander :

  • La demande d'autorisations augmente la probabilité que votre code fonctionne correctement, s'il est autorisé à s'exécuter. Le code qui demande un jeu minimal d'autorisations ne s'exécutera pas sauf s'il reçoit ces autorisations. Si vous n'identifiez pas un jeu d'autorisations minimal, votre code doit normalement gérer absolument toutes les situations où le refus d'autorisations peut l'empêcher de s'exécuter de manière appropriée.

  • La demande d'autorisations aide à garantir que votre code ne reçoit que les autorisations dont il a besoin. Si votre code ne reçoit pas d'autorisations supplémentaires, il ne peut pas endommager les ressources protégées par ces autorisations, même s'il est exploité par du code nuisible ou contient des bogues qui peuvent être utilisés pour altérer les ressources. Vous ne devez demander que les autorisations dont votre code a besoin et seulement celles-ci.

  • La demande d'autorisations informe les administrateurs de la quantité minimale d'autorisations dont votre application a besoin de sorte qu'ils puissent ajuster la stratégie de sécurité en conséquence. Les administrateurs utilisent l'outil Permission View Tool (Permview.exe) pour examiner les assemblys et établir la stratégie de sécurité afin d'émettre les autorisations requises. Si vous ne faites pas explicitement la demande des autorisations dont votre application a besoin, l'outil Permission View ne peut pas retourner d'informations concernant ces autorisations. Si un administrateur n'a pas connaissance de ces informations, votre application est difficile à administrer.

La demande d'autorisations informe le runtime des autorisations dont votre application a besoin pour fonctionner ou celles dont elle ne veut absolument pas. Par exemple, si votre application écrit sur le disque dur local sans utiliser le stockage isolé, votre application doit disposer de FileIOPermission. Si votre code ne demande pas FileIOPermission et si les paramètres de sécurité locaux ne permettent pas à votre application d'avoir cette autorisation, une exception de sécurité est levée lorsque l'application tente d'écrire sur le disque. Même si l'application peut gérer l'exception, elle ne sera pas autorisée à écrire sur le disque. Ce comportement peut se révéler frustrant pour les utilisateurs si votre application est un programme d'édition de texte qu'ils utilisent depuis longtemps. D'autre part, si votre application demande FileIOPermission et si les paramètres de sécurité locaux n'autorisent pas votre application à avoir FileIOPermission, l'application générera l'exception lorsqu'elle démarre et l'utilisateur ne sera pas confronté au problème de la perte de son travail. De plus, si votre application demande FileIOPermission et s'il s'agit d'une application de confiance, l'administrateur peut régler la stratégie de sécurité pour lui permettre de s'exécuter à partir du partage distant.

Si votre code n'accède pas à des ressources protégées ou n'effectue pas d'opérations protégées, il n'est pas nécessaire de demander des autorisations. Par exemple, une demande d'autorisation peut ne pas s'avérer nécessaire si le code calcule simplement un résultat basé sur les entrées qui lui sont passées, sans utiliser aucune ressource. Si votre code accède à des ressources protégées mais ne demande pas les autorisations nécessaires, il peut toujours être autorisé à s'exécuter mais il peut échouer à un certain point de l'exécution s'il tente d'accéder à une ressource pour laquelle il n'a pas l'autorisation nécessaire.

Pour demander des autorisations, vous devez connaître les ressources et les opérations protégées que votre code utilise ainsi que les autorisations qui protègent ces ressources et opérations. De plus, vous devez garder une trace des ressources auxquelles les méthodes des bibliothèques de classes appelées par vos composants ont accédé. Pour obtenir une liste des autorisations d'accès du code incluses dans le .NET Framework, consultez la rubrique Autorisations.

Le tableau suivant décrit les types de demandes d'autorisation.

Demande d'autorisation

Description

Autorisations minimales (RequestMinimum)

Autorisations que votre code doit avoir pour s'exécuter.

Autorisations optionnelles (RequestOptional)

Autorisations que votre code peut utiliser mais sans lesquelles il peut s'exécuter efficacement. Cette demande refuse de manière implicite toutes les autres autorisations qu'elle n'a pas spécifiquement demandées.

Autorisations refusées (RequestRefuse)

Autorisations dont vous souhaitez vous assurer qu'elles ne seront jamais accordées à votre code, même si la stratégie de sécurité autorise leur accord.

Effectuer l'une des demandes ci-dessus sur des jeux d'autorisations intégrés (Demande de jeux d'autorisations intégrés).

Jeux d'autorisations intégrés, dont : Nothing, Execution, FullTrust, Internet, LocalIntranet et SkipVerification.

Effectuer l'une des demandes ci-dessus sur des jeux d'autorisations codés en XML (Demande d'autorisations codées en XML).

Représentation XML (chaîne contenant le jeu d'autorisations codé en XML ou emplacement d'un fichier XML contenant le jeu d'autorisations codé) d'un jeu d'autorisations souhaité.

Si vous spécifiez des autorisations requises (à l'aide de RequestMinimum), le code recevra chaque autorisation requise permise par la stratégie de sécurité. Le code sera autorisé à s'exécuter uniquement si toutes les autorisations dont il a besoin lui ont été octroyées.

Demander des autorisations optionnelles sans également demander les autorisations requises peut, dans certains cas, restreindre considérablement les autorisations accordées à un assembly. Supposons par exemple que la stratégie de sécurité accorde normalement à l'Assembly A les autorisations associées au jeu d'autorisations nommé Everything. Si le développeur de l'Assembly A demande l'Autorisation A comme optionnelle et ne demande aucune autorisation requise, l'Assembly A recevra l'Autorisation A (si la stratégie de sécurité le permet) ou absolument aucune autorisation.

Voir aussi

Tâches

Comment : demander l'autorisation pour un jeu d'autorisations nommé

Concepts

Notions fondamentales de la sécurité d'accès du code

Manifeste d'assembly

Autorisations de sécurité

Demande d'autorisations codées en XML

Stratégie de sécurité

Référence

FileIOPermission

SecurityAction.RequestMinimum

SecurityAction.RequestOptional

RequestRefuse

Autres ressources

Sécurité d'accès du code