Autorisations de sécurité

Le Common Language Runtime permet au code d'effectuer uniquement les opérations qu'il est autorisé à exécuter. Le runtime utilise des objets appelés autorisations pour appliquer des restrictions sur le code managé. Le runtime fournit des classes d'autorisations intégrées dans plusieurs espaces de noms et prend également en charge la conception et l'implémentation de classes d'autorisations personnalisées.

Il existe deux types d'autorisations et à chacun d'eux correspond un objectif spécifique :

  • Autorisations d'accès du code ou autorisations d'accès au code. Elles représentent l'accès à une ressource protégée ou la capacité d'exécuter une opération protégée.

  • Autorisations de sécurité basées sur les rôles ou autorisations de sécurité basées sur les rôle. Elles fournissent un mécanisme permettant de déterminer si un utilisateur (ou un agent agissant en son nom) a une identité particulière ou s'il est membre d'un rôle spécifié. PrincipalPermission est la seule autorisation de sécurité basée sur les rôles.

Les autorisations de sécurité peuvent avoir la forme d'une classe d'autorisation (sécurité impérative) ou d'un attribut représentant une classe de permission (sécurité déclarative). La classe de base pour les autorisations de sécurité est System.Security.CodeAccessPermission ; la classe de base pour les attributs d'autorisation de sécurité est System.Security.Permissions.CodeAccessSecurityAttribute.

Un jeu d'autorisations est accordé à une application, sous la forme d'un assembly, lorsque l'application est chargée dans un domaine d'application. L'attribution est généralement effectuée à l'aide de jeux d'autorisations prédéfinis déterminés par la méthode SecurityManager.GetStandardSandbox. Le jeu d'autorisations détermine les autorisations dont dispose le code. Le runtime accorde des autorisations en fonction de l'emplacement d'origine du code (par exemple, l'ordinateur local, l'intranet local ou Internet). Des autorisations spéciales peuvent également être accordées au code s'il est chargé dans un Bac à sable (sandbox). Pour plus d'informations sur l'exécution du code dans un Bac à sable (sandbox), consultez Comment : exécuter du code d'un niveau de confiance partiel dans un bac à sable (sandbox).

Les principales utilisations des autorisations sont les suivantes :

  • Le code de bibliothèque peut exiger que ses appelants disposent d'autorisations spécifiques. Si vous placez une demande Demand pour une autorisation dans votre code, tout code utilisant ce dernier doit avoir cette autorisation pour s'exécuter. Les demandes peuvent être utilisées pour déterminer si les appelants ont accès aux ressources spécifiques ou pour découvrir l'identité d'un appelant.

  • Le code peut utiliser des autorisations pour refuser l'accès aux ressources qu'il souhaite protéger. Vous pouvez utiliser SecurityAction.PermitOnly pour spécifier un jeu d'autorisations limité, refusant implicitement toutes les autres autorisations. Toutefois, nous déconseillons l'utilisation de PermitOnly pour interdire l'accès dans le but de protéger le code contre toute utilisation malveillante. Les assemblys appelés, dont le jeu d'autorisations comporte les autorisations implicitement refusées, peuvent remplacer les autorisations refusées en effectuant une SecurityAction.Assert pour toute autorisation qu'ils souhaitent utiliser. Par exemple, si vous avez uniquement autorisé UIPermission et appelé un assembly qui, par nature, comporte FileIOPermission, l'assembly peut simplement effectuer une Assert pour FileIOPermission et effectuer des opérations sur les fichiers. La seule méthode permettant de protéger efficacement les ressources contre le code non fiable dans les assemblys référencés consiste à exécuter ce code avec un jeu d'autorisations qui n'inclut pas ces autorisations.

Voir aussi

Concepts

Autorisations d'accès du code

Autorisations de sécurité basées sur les rôles

Autres ressources

Concepts fondamentaux sur la sécurité