
Programmation de la confiance partielle
Pour les applications XBAP, le code qui dépasse le cadre du jeu d'autorisations de la zone Internet par défaut est déterminé par la CAS, ce qui lève une exception de sécurité et ferme l'application. Même si cela protège les utilisateurs, cela ne procure pas une expérience utilisateur optimale.
Il est généralement possible que le code qui risque de dépasser le cadre des autorisations accordées soit du code commun partagé entre des applications autonomes et des applications hébergées par le navigateur. La CAS et WPF proposent plusieurs techniques permettant de gérer ce scénario.
Détermination des autorisations à l'aide de la sécurité d'accès du code
Dans certains cas, le code partagé qui figure dans des assemblys de bibliothèque peut être utilisé par des applications autonomes et des applications XBAP. Le code risque alors d'exécuter des fonctionnalités qui pourraient requérir d'autres autorisations que celles accordées par le jeu d'autorisations de l'application. Votre application peut déterminer si une autorisation donnée lui est accordée à l'aide de la sécurité Microsoft .NET Framework. Elle peut plus particulièrement tester si une autorisation donnée lui est accordée en appelant la méthode Demand sur l'instance de l'autorisation en question. Cette vérification est illustrée dans l'exemple ci-dessous, où le code vérifie s'il peut enregistrer un fichier sur le disque local :
Lorsqu'une autorisation n'est pas accordée à une application, l'appel à Demand lève une exception de sécurité. Sinon, cela signifie que l'autorisation a été accordée. IsPermissionGranted encapsule ce comportement et retourne true ou false, selon le cas.
Dégradation progressive des fonctionnalités
Pour du code qui peut être exécuté à partir de différentes zones, il est intéressant de pouvoir déterminer si une autorisation de faire ce qu'il a besoin de faire lui est accordée ou non. Même si la détermination de la zone est un élément, il est de loin préférable de proposer si possible une alternative à l'utilisateur. Par exemple, une application de confiance totale permet généralement aux utilisateurs de créer des fichiers où bon leur semble, alors qu'une application de confiance partielle ne leur permet de créer des fichiers que dans le stockage isolé. Si du code permettant de créer un fichier figure dans un assembly (.dll) qui est partagé par des applications de confiance totale (applications autonomes) et des applications de confiance partielle (applications hébergées par le navigateur) et que les deux applications souhaitent que les utilisateurs puissent créer des fichiers, le code partagé doit alors déterminer s'il est exécuté avec une confiance partielle ou totale avant de créer un fichier à l'emplacement indiqué. Le code suivant illustre ces deux cas de figure :
Dans de nombreux cas, vous devez pouvoir trouver une alternative à la confiance partielle.
Dans un environnement contrôlé, tel qu'un intranet, vous pouvez installer des infrastructures managées personnalisées sur la base cliente dans le Global Assembly Cache (GAC). Grâce à AllowPartiallyTrustedCallersAttribute, ces bibliothèques peuvent exécuter du code qui requiert une confiance totale et être référencées à partir d'applications de confiance partielle uniquement (pour plus d'informations, consultez Sécurité de Windows Presentation Foundation et Stratégie de sécurité de Windows Presentation Foundation – sécurité de la plateforme).
Détermination de l'hôte de navigateur
L'utilisation de la CAS pour vérifier si des autorisations sont accordées est une technique indiquée lorsque vous devez effectuer des vérifications autorisation par autorisation. Cette technique dépend toutefois de l'interception d'exceptions dans le cadre d'un traitement normal, ce qui n'est généralement pas recommandé et risque d'entraîner des problèmes de performances. Si votre application du navigateur XAML (XBAP) est uniquement exécutée dans le bac à sable de la zone Internet, vous pouvez alors utiliser BrowserInteropHelper..::.IsBrowserHosted, qui retourne la valeur true pour les applications du navigateur XAML (XBAP).
Consultez Détection de l'hébergement dans un navigateur, exemple.
Remarque : |
|---|
IsBrowserHosted peut uniquement déterminer si une application est exécutée dans un navigateur. Il ne peut pas déterminer le jeu d'autorisations avec lequel une application est exécutée. |