Demande d'autorisations

Remarque importanteImportant

Dans le .NET Framework version 4, la prise en charge du runtime a été supprimée pour les demandes d'autorisation RequestMinimum, RequestOptional et RequestRefuse.Cette rubrique ne s'applique pas au code basé sur le .NET Framework 4 ou version ultérieure.Pour plus d'informations sur cette modification et d'autres modifications, consultez Modifications de sécurité dans le .NET Framework 4 .

La demande d'autorisations 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 d'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 donner plus d'autorisations que celles qui lui ont été accordées. La stratégie d'administration locale a toujours le contrôle final sur les autorisations maximales accordées à votre code.

RemarqueRemarque

Le code qui est destiné à résider sur un ordinateur s'exécute dans le My_Computer_Zone qui, par défaut, bénéficie d'une confiance totale.La confiance totale entraîne l'approbation de toutes les demandes d'autorisation.Les demandes d'autorisations aboutissent toujours, même pour les autorisations d'identité pour lesquelles la condition d'identité n'est pas remplie.Si votre code est destiné à s'exécuter uniquement dans le My_Computer_Zone, la demande d'autorisations ne présente aucun intérêt.Si votre code est destiné à s'exécuter dans l'une des autres zones, la demande d'autorisations est recommandée.

RemarqueRemarque

Dans le .NET Framework 3.5 Service Pack 1 et versions ultérieures, les applications se trouvant sur des partages sur l'intranet s'exécutent par défaut en mode confiance totale.Si votre application est destinée à s'exécuter à partir d'un partage, elle s'exécutera en mode confiance totale exactement comme une application qui réside sur un ordinateur.Pour plus d'informations, consultez Exécution d'applications intranet de confiance totale.

Bien que votre code n'ait pas besoin de demander des autorisations pour s'exécuter en mode confiance totale, il doit toujours en demander, et ce pour les raisons importantes suivantes :

  • 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. Vous pouvez déterminer les autorisations requises par votre application à partir de l'onglet Sécurité de la page de propriétés de projet pour un projet Visual Studio. 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 encodés en XML (Demande d'autorisations encodées en XML).

Représentation XML (chaîne contenant le jeu d'autorisations encodé en XML ou emplacement d'un fichier XML contenant le jeu d'autorisations encodé) 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é

Référence

FileIOPermission

SecurityAction.RequestMinimum

SecurityAction.RequestOptional

RequestRefuse

Concepts

Sécurité d'accès du code

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

Manifeste d'assembly

Autorisations de sécurité

Demande d'autorisations encodées en XML

Stratégie de sécurité .NET Framework