Comment utiliser l'attribut AllowPartiallyTrustedCallers pour appeler un assembly qui possède un nom fort d'une page Web en utilisant Visual C# .NET, Visual C# 2005 ou de versions ultérieures

Traductions disponibles Traductions disponibles
Numéro d'article: 839300 - Voir les produits auxquels s'applique cet article
important Cet article contient des informations qui vous indique comment réduire les paramètres de sécurité ou comment désactiver les fonctionnalités de sécurité sur un ordinateur. Vous pouvez modifier ces pour contourner un problème spécifique. Avant d'effectuer ces modifications, nous vous recommandons d'évaluer les risques associés à l'implémentation de cette solution de contournement dans votre environnement particulier. Si vous implémentez cette solution de contournement, prenez toutes les mesures supplémentaires pour protéger votre système.
Agrandir tout | Réduire tout

Sommaire

Résumé

Vous êtes conseillé d'appeler un contrôle utilisateur Windows à partir d'une page Web. Pour appeler un contrôle utilisateur Windows qui peut accéder aux ressources sécurisées et qui est créé en tant qu'assembly qui possède un nom fort, vous devez marquer l'assembly du contrôle utilisateur Windows avec l'attribut d'assembly AllowPartiallyTrusted . Vous devez également inclure un appel à la méthode Assert pour permettre le contrôle utilisateur Windows pour accéder à la ressource sécurisée.

INTRODUCTION

Cet article étape par étape explique comment appeler un Windows contrôle utilisateur à partir d'une page Web. Le contrôle utilisateur Windows décrit dans cet article est créé en tant qu'assembly qui possède un nom fort. L'exemple de cet article explique comment utiliser l'attribut AllowPartiallyTrustedCallers de l'assembly de sorte qu'un assembly qui possède un nom fort peut être accessibles à partir d'une page Web. L'exemple de l'article décrit également comment utiliser la méthode Assert .

Créer une paire de clés qui possède un nom fort

Une paire de clés qui possède un nom fort est utilisée pour signer un assembly pour un contrôle utilisateur qui possède un nom fort. Le nom fort est utilisé lorsque vous créez un groupe de code qui accorde l'autorisation d'utiliser l'assembly de code partiellement approuvé.
  1. Ouvrez une invite de commande Visual Studio.

    Dans Microsoft Visual Studio .NET 2002, cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET , pointez sur Outils de Visual Studio .NET et puis cliquez sur invite de commande Visual Studio .NET . Les Visual Studio fenêtre d'invite de commande .NET s'affiche.

    Dans Microsoft Visual Studio .NET 2003, cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET 2003 , pointez sur Outils de Visual Studio .NET et puis cliquez sur invite de commande Visual Studio .NET 2003 . La fenêtre d'invite de commande Visual Studio .NET 2003 s'affiche.

    Dans Visual Studio 2005, cliquez sur Démarrer , pointez sur programmes , pointez vers Visual Studio 2005 , pointez sur Visual Studio 2005 Tools et puis cliquez sur invite de commande Visual Studio 2005 . La fenêtre d'invite de commande Visual Studio 2005 s'affiche.

    Dans Visual Studio 2008, cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio 2008 , pointez sur Outils de Visual Studio 2008 et puis cliquez sur Visual Studio 2008 invite . La fenêtre Visual Studio 2008Command invite s'affiche.
  2. Tapez suivantes à l'invite de commandes et appuyez sur ENTRÉE :
    c:\snKey.snk-k SN

Créer un contrôle utilisateur Windows à l'aide de Visual C# .NET, Visual C# 2005 ou une version ultérieure

Avertissement Cette solution de contournement peut rendre votre ordinateur ou votre réseau plus vulnérable aux attaques d'utilisateurs malintentionnés ou de logiciels malveillants tels que les virus. Nous déconseillons cette solution de contournement mais sont fournir ces informations afin que vous pouvez implémenter cette solution de contournement à votre propre discrétion. Utiliser cette solution de contournement à vos risques et périls.

Ce contrôle utilisateur illustre comment utiliser l'attribut AllowPartiallyTrustedCallers d'un assembly. Un assembly qui possède un nom fort puisse être appelée seulement par un appelant totalement approuvé, sauf si l'assembly utilise l'attribut AllowPartiallyTrustedCallers . L'exemple pour le contrôle utilisateur montre également comment utiliser la méthode Assert . La méthode Assert déclare que le code appelant pouvez utiliser le code qui appelle la méthode Assert pour accéder à la ressource qui est protégée par une demande d'autorisation. Le code peut accéder à la ressource même si les appelants sont supérieurs dans la pile ont ne pas autorisation d'accéder à la ressource.

Ce contrôle utilisateur permet de sélectionner un fichier via la boîte de dialogue Ouvrir. Le contrôle ouvre ensuite le fichier texte dans la zone de liste. L'interface utilisateur de ce contrôle utilisateur inclut une zone de texte et une zone de liste. La zone de texte affiche le nom du fichier qui est sélectionné et la zone de liste affiche le contenu du fichier qui est sélectionné.

Pour lire le nom du fichier sélectionné à partir de la zone OpenFileDialog , pour lire le fichier, l'autorisation FileIOPermission type d'autorisation doit être accordé. Le contrôle utilisateur doit possèdent cette autorisation accordée via son groupe code. La page Web qui appelle le contrôle ne possède pas cette autorisation.

Pour empêcher un parcours de pile n'aboutit pas parce que l'appelant n'a pas le type d'autorisation FileIOPermission requis, utilisez la méthode Assert . Notez que la méthode Assert pouvez ouvre des failles de sécurité si la méthode Assert est utilisée de façon incorrecte ou mis. Par conséquent, vous devez utiliser la méthode Assert avec grande précaution. Une méthode RevertAssert doit suivez la méthode Assert dès que l'opération de fichier est terminée.

note Pour vous assurer que le contenu du fichier s'affichent correctement dans la zone de liste, utilisez ce contrôle utilisateur pour sélectionner uniquement les fichiers texte.
  1. Démarrez Visual Studio .NET, Visual Studio 2005 ou une version ultérieure de Visual Studio.
  2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet . La boîte de dialogue Nouveau projet s'affiche.
  3. Sous types de projets , cliquez sur projets Visual C# .

    note Dans Visual Studio, cliquez sur Visual C# sous types de projet .
  4. Sous modèles , cliquez sur Windows bibliothèque de contrôles .
  5. Dans la zone Nom , tapez ContrôleUtilisateur (UserControl) .
  6. Cliquez sur OK .
  7. Dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur UserControl1.cs , puis cliquez sur Afficher le code . Le fichier UserControl1.cs apparaît.
  8. Remplacez le code existant par le code suivant :
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    using System.IO;
    using System.Security;
    using System.Security.Permissions;
    using System.Reflection;
    using System.Runtime.CompilerServices;
    
    [assembly:AllowPartiallyTrustedCallers]
    
    namespace UserControl
    {
    	/// <summary>
    	/// Summary description for UserControl1.
    	/// </summary>
    	public class UserControl1 : System.Windows.Forms.UserControl
    	{
    		private System.Windows.Forms.TextBox textBox1;
    		private System.Windows.Forms.ListBox listBox1;
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		private System.ComponentModel.Container components = null;
    
    		public UserControl1()
    		{
    			// This call is required by the Windows.Forms Form Designer.
    			InitializeComponent();
    
    			// TODO: Add any initialization after the InitForm call.
    			OpenFileDialog fileDialog = new OpenFileDialog();
    			if(fileDialog.ShowDialog() == DialogResult.OK)
    			{
    				// Reading the name of the selected file from the OpenFileDialog box
    				// and reading the file requires FileIOPermission.   
    				// The Assert command must be followed by a RevertAssert as soon as the file operation 
    				// is completed.
    				new FileIOPermission(PermissionState.Unrestricted).Assert();
    				textBox1.Text = fileDialog.FileName;
    				// Display the contents of the file in the text box.
    				FileStream fsIn = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read, 
    					FileShare.Read);
    				StreamReader sr = new StreamReader(fsIn);
    			
    				// Process every line in the file.
    				for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine()) 
    				{
    					listBox1.Items.Add(Line);
    				}
    				// It is very important to call RevertAssert to restore the stack walk for
    				// file operations.
    				FileIOPermission.RevertAssert();
    			}
    
    		}
    
    		/// <summary>
    		/// Clean up any resources that are being used.
    		/// </summary>
    		protected override void Dispose( bool disposing )
    		{
    			if( disposing )
    			{
    				if( components != null )
    					components.Dispose();
    			}
    			base.Dispose( disposing );
    		}
    
    		#region Component Designer generated code
    		/// <summary>
    		/// Required method for Designer support. Do not modify 
    		/// the contents of this method with the code editor.
    		/// </summary>
    		private void InitializeComponent()
    		{
    			this.textBox1 = new System.Windows.Forms.TextBox();
    			this.listBox1 = new System.Windows.Forms.ListBox();
    			this.SuspendLayout();
    			// 
    			// textBox1
    			// 
    			this.textBox1.Location = new System.Drawing.Point(32, 16);
    			this.textBox1.Name = "textBox1";
    			this.textBox1.TabIndex = 0;
    			this.textBox1.Text = "textBox1";
    			// 
    			// listBox1
    			// 
    			this.listBox1.Location = new System.Drawing.Point(144, 16);
    			this.listBox1.Name = "listBox1";
    			this.listBox1.Size = new System.Drawing.Size(120, 95);
    			this.listBox1.TabIndex = 1;
    			// 
    			// UserControl1
    			// 
    			this.Controls.Add(this.listBox1);
    			this.Controls.Add(this.textBox1);
    			this.Name = "UserControl1";
    			this.Size = new System.Drawing.Size(376, 120);
    			this.ResumeLayout(false);
    
    		}
    		#endregion
    			}
    }
    
  9. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur AssemblyInfo.cs , puis cliquez sur Afficher le code . Le fichier AssemblyInfo.cs apparaît.
  10. Recherchez le code suivant :
    [assembly: AssemblyVersion("1.0.*")]
    remplacer ce code avec le code suivant :
    [assembly: AssemblyVersion("1.0.0.0")]
  11. Recherchez le code suivant :
    [assembly: AssemblyKeyFile("")]
    remplacer ce code avec le code suivant :
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. Dans le menu Générer , cliquez sur Créer solution .

Créer un groupe code afin d'affecter les autorisations de l'assembly

Avertissement Cette solution de contournement peut rendre votre ordinateur ou votre réseau plus vulnérable aux attaques d'utilisateurs malintentionnés ou de logiciels malveillants tels que les virus. Nous déconseillons cette solution de contournement mais sont fournir ces informations afin que vous pouvez implémenter cette solution de contournement à votre propre discrétion. Utiliser cette solution de contournement à vos risques et périls.

Un groupe de codes détermine si un assembly correspond à critères définies par l'administrateur qui est appelé une condition d'appartenance. Si l'assembly correspond, le groupe de code accorde à l'assembly un ensemble d'autorisations qui a été associé à ce groupe de code.

Pour créer un groupe de code :
  1. Cliquez sur Démarrer , pointez sur Paramètres , puis cliquez sur le Panneau de configuration . La fenêtre Panneau de configuration s'affiche.
  2. Double-cliquez sur Outils d'administration . La fenêtre d'outils d'administration s'affiche.
  3. Dans Microsoft Visual Studio .NET 2002, double-cliquez sur Configuration de Microsoft .NET Framework . Le .NET Framework Configuration fenêtre s'affiche.

    Pour Microsoft Visual Studio .NET 2003, double-cliquez sur Microsoft .NET Framework 1.1 Configuration . La fenêtre .NET configuration 1.1 s'affiche.

    Dans Visual Studio 2005 ou dans les versions ultérieures, double-cliquez sur Configuration de Microsoft .NET Framework 2.0 . Le .NET Framework 2.0 Configuration fenêtre s'affiche.
  4. Dans le volet gauche, développez stratégie de sécurité d'exécution , développez l'ordinateur et puis développez Groupes de code .
  5. Cliquez avec le bouton droit sur All_Code , puis cliquez sur Nouveau . L'Assistant Créer un groupe de code s'affiche.
  6. Vérifiez que créer un nouveau code de groupe est sélectionné, tapez MyUserControlCodeGroup dans la zone Nom et cliquez sur suivant . La page Choisir un type de condition s'affiche.
  7. Dans la liste Choisir le type de condition pour ce groupe de code , cliquez sur nom fort .
  8. Cliquez sur Importer . La boîte de dialogue Importer fort nom de assembly s'affiche.
  9. Recherchez le fichier UserControl.dll que vous avez créé dans la section « Créer un contrôle utilisateur Windows en utilisant Microsoft Visual C# .NET, Microsoft Visual C# 2005 ou une version ultérieure », puis cliquez sur Ouvrir .
  10. Cliquez sur suivant . La page d'affecter un ensemble d'autorisation pour le groupe de code s'affiche.
  11. Cliquez sur autorisation existante utiliser , sélectionnez FullTrust dans la liste et puis cliquez sur suivant . La page Fin de l'Assistant s'affiche.
  12. Cliquez sur Terminer pour fermer l'Assistant Créer un groupe de code.

Créer un fichier HTML pour appeler le contrôle utilisateur

Après avoir créé un groupe de code à affecter les autorisations de l'assembly, vous devez créer un fichier HTML pour appeler le contrôle utilisateur à partir de l'Explorateur, et vous devez configurer l'environnement pour vous assurer que le contrôle utilisateur est appelé avec succès.
  1. Cliquez sur Démarrer , cliquez sur Exécuter , tapez notepad et puis cliquez sur OK .
  2. Dans le bloc-notes, collez le code suivant :
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>
        
    </OBJECT> 
  3. Dans le dossier racine de Microsoft Internet Information Services (IIS), enregistrez le fichier en tant que CallUserControl.htm.
  4. Copiez le fichier UserControl.dll que vous créé dans la section « Créer un contrôle utilisateur Windows en utilisant Microsoft Visual C# .NET, Microsoft Visual C# 2005 ou une version ultérieure » dans le dossier racine de services Internet (IIS).
  5. Ouvrez Microsoft Internet Explorer.
  6. Dans la zone Adresse , tapez http://localhost/CallUserControl.htm et puis appuyez sur ENTRÉE. La boîte de dialogue Ouvrir s'affiche.
  7. Rechercher n'importe quel fichier texte, puis cliquez sur Ouvrir . Le texte du fichier s'affiche dans le contrôle zone de liste sur le navigateur.

Références

Pour plus d'informations, reportez-vous aux sites Microsoft Developer réseau MSDN (Web adresses suivantes :
Configuration des groupes de code à l'aide de l'outil de configuration de .NET Framework
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

Méthode CodeAccessPermission.Assert
http://msdn2.microsoft.com/en-us/library/system.security.codeaccesspermission.assert(vs.71).aspx

Les assemblys .NET framework et l'attribut AllowPartiallyTrustedCallers
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

Classe AllowPartiallyTrustedCallersAttribute
http://msdn2.microsoft.com/en-us/library/system.security.allowpartiallytrustedcallersattribute(vs.71).aspx

Considérations de sécurité assembly
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

Dossiers de sécurité : noms fort et de sécurité dans le .NET Framework
http://msdn2.microsoft.com/en-us/library/aa302416.aspx

Propriétés

Numéro d'article: 839300 - Dernière mise à jour: mardi 15 juillet 2008 - Version: 4.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Initiation
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual C# 2008 Express Edition
Mots-clés : 
kbmt kbhowtomaster kbhowto kblistbox kbfileio kbdll kbcontrol kbweb kbuser kbsecurity kbpolicy kbopenfile KB839300 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 839300
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com