Cómo utilizar el atributo AllowPartiallyTrustedCallers para llamar a un ensamblado que tenga un nombre seguro desde una página Web utilizando Visual C#. NET, Visual C# 2005 o versiones posteriores

Seleccione idioma Seleccione idioma
Id. de artículo: 839300 - Ver los productos a los que se aplica este artículo
importante Este artículo contiene información que muestra cómo para ayudar a reducir la configuración de seguridad o cómo desactivar las características de seguridad en un equipo. Puede realizar estos cambios para evitar un problema concreto. Antes de realizar estos cambios, le recomendamos que evalúe los riesgos asociados a esta solución en su entorno concreto. Si decide implementar esta forma de evitar el problema, tome las medidas adicionales oportunas para ayudar a proteger su sistema.
Expandir todo | Contraer todo

En esta página

Resumen

puede que desee llamar a un control de usuario de Windows desde una página Web. Para llamar a un control de usuario de Windows que pueda tener acceso a los recursos protegidos y que se genera como un ensamblado que tiene un nombre seguro, debe marcar el ensamblado del control de usuario de Windows con el atributo de ensamblado AllowPartiallyTrustedCallersAttribute . También debe incluir una llamada al método Assert para permitir que el control de usuario de Windows tener acceso a recursos protegidos.

INTRODUCCIÓN

En este artículo paso a paso se describe cómo llamar a un Windows control de usuario desde una página Web. El control de usuario de Windows que se describe en este artículo se genera como un ensamblado que tiene un nombre seguro. El ejemplo en este artículo describe cómo utilizar el atributo AllowPartiallyTrustedCallers del ensamblado, de modo que puede obtener acceso a un ensamblado que tiene un nombre seguro desde una página Web. El ejemplo en el artículo también describe cómo utilizar el método Assert .

Crear un par de claves que tiene un nombre seguro

Un par de claves que tiene un nombre seguro se utiliza para firmar un ensamblado para un control de usuario que tiene un nombre seguro. El nombre seguro se utiliza cuando se crea un grupo de código concede permiso para utilizar el ensamblado de código de confianza parcial.
  1. Abra un símbolo del sistema de Visual Studio.

    En Microsoft Visual Studio .NET 2002, haga clic en Inicio , seleccione programas , Visual Studio.NET , Herramientas de Visual Studio .NET y a continuación, haga clic en Visual Studio .NET . Visual Studio Aparece de ventana de símbolo del sistema de .NET.

    En Microsoft Visual Studio .NET 2003, haga clic en Inicio , seleccione programas , Visual Studio .NET 2003 , Herramientas de Visual Studio .NET y a continuación, haga clic en Visual Studio .NET 2003 . Aparecerá la ventana de símbolo del sistema de Visual Studio .NET 2003.

    En Visual Studio 2005, haga clic en Inicio , seleccione programas , Microsoft Visual Studio 2005 , Visual Studio 2005 Tools y, a continuación, haga clic en símbolo del sistema de Visual Studio 2005 . Aparecerá la ventana de símbolo del sistema de Visual Studio 2005.

    En Visual Studio 2008, haga clic en Inicio , seleccione programas , Microsoft Visual Studio 2008 , Visual Studio 2008 Tools y, a continuación, haga clic en símbolo del sistema de Visual Studio 2008 . Aparecerá la ventana Símbolo del sistema de Visual Studio 2008Command.
  2. Escriba lo siguiente en el símbolo del sistema y, a continuación, presione ENTRAR:
    sn -k c:\snKey.snk

Crear un control de usuario de Windows mediante Microsoft Visual C#. NET, Microsoft Visual C# 2005 o una versión posterior

Advertencia Esta solución puede hacer que el equipo o su red sean más vulnerables a ataques de usuarios malintencionados o de software malintencionado como virus. Nos no recomendamos esta solución, pero son proporcionar esta información para que esta solución se puede implementar su propia discreción. Utilice esta solución bajo su responsabilidad.

Este control de usuario muestra cómo utilizar el atributo AllowPartiallyTrustedCallers de un ensamblado. Un ensamblado que tiene un nombre seguro sólo se puede llamar un llamador de plena confianza a menos que el ensamblado utiliza el atributo AllowPartiallyTrustedCallers . El control de usuario en el ejemplo también muestra cómo utilizar el método Assert . El método Assert declara que el código de llamada puede utilizar el código que llama el método Assert para tener acceso al recurso protegido por una petición de permiso. El código puede tener acceso al recurso incluso si los llamadores que son mayores en la pila no tienen permiso de acceso del recurso.

Este control de usuario le permite seleccionar un archivo mediante el cuadro de diálogo abierto. El control a continuación, abre el archivo de texto en el cuadro de lista. La interfaz de usuario de este control de usuario incluye un cuadro de texto y un cuadro de lista. El cuadro de texto muestra el nombre del archivo que está seleccionado y el cuadro de lista muestra el contenido del archivo que está seleccionada.

Para leer el nombre del archivo seleccionado desde el cuadro OpenFileDialog y leer el archivo, el tipo de permiso debe concederse de FileIOPermission. El control de usuario debe tener este permiso a través de su grupo de código. La página Web que llama el control no tiene este permiso.

Para evitar que un recorrido de pila no es correcto porque el llamador no tiene el tipo de permiso FileIOPermission requerido, utilice el método Assert . Tenga en cuenta que el método Assert puede abrir puntos vulnerables de seguridad si se utiliza el método Assert incorrecta o inapropiadamente. Por lo tanto, debe utilizar el método Assert con mucha precaución. Un método RevertAssert debe seguir el método Assert en cuanto se haya completado la operación de archivo.

Nota Para asegurarse de que el contenido del archivo aparece correctamente en el cuadro de lista, utilice este control de usuario para seleccionar sólo los archivos de texto.
  1. Inicie Visual Studio.NET, Microsoft Visual Studio 2005 o una versión posterior de Visual Studio.
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto . Aparecerá el cuadro de diálogo nuevo proyecto .
  3. En Tipos de proyecto , haga clic en Proyectos de Visual C# .

    Nota En Visual Studio, haga clic en C# en Tipos de proyecto .
  4. En plantillas , haga clic en Windows Control Library .
  5. En el cuadro nombre , escriba UserControl .
  6. Haga clic en Aceptar .
  7. En la ventana Explorador de soluciones, haga clic con el botón secundario del mouse en UserControl1.cs y, a continuación, haga clic en Ver código . El archivo UserControl1.cs aparece.
  8. Reemplace el código existente con el código siguiente:
    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. En el Explorador de soluciones, haga clic con el botón secundario del mouse en AssemblyInfo.cs y, a continuación, haga clic en Ver código . Parece que el archivo AssemblyInfo.cs.
  10. Busque el código siguiente:
    [assembly: AssemblyVersion("1.0.*")]
    reemplazar este código con el siguiente código:
    [assembly: AssemblyVersion("1.0.0.0")]
  11. Busque el código siguiente:
    [assembly: AssemblyKeyFile("")]
    reemplazar este código con el siguiente código:
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. En el menú Generar , haga clic en Generar soluciones .

Cree un grupo de código para asignar permisos para el ensamblado

Advertencia Esta solución puede hacer que el equipo o su red sean más vulnerables a ataques de usuarios malintencionados o de software malintencionado como virus. Nos no recomendamos esta solución, pero son proporcionar esta información para que esta solución se puede implementar su propia discreción. Utilice esta solución bajo su responsabilidad.

Un grupo de código determina si un ensamblado coincide con los criterios definidos por el administrador que se conoce como una condición de pertenencia. Si coincide con el ensamblado, el grupo de código concede al ensamblado un conjunto de permisos que se ha asociado a ese grupo de código.

Para crear un grupo de código:
  1. Haga clic en Inicio , seleccione configuración y, a continuación, haga clic en Panel de control . Aparecerá la ventana Panel de control .
  2. Haga doble clic en Herramientas administrativas . Aparecerá la ventana Herramientas administrativas .
  3. En Microsoft Visual Studio .NET 2002, haga doble clic en configuración de Microsoft .NET Framework . El .NET Framework Configuration aparecerá la ventana.

    Para Microsoft Visual Studio .NET 2003, haga doble clic en Microsoft .NET Framework 1.1 Configuration . Aparecerá la ventana configuración de .NET 1.1 .

    En Microsoft Visual Studio 2005 o en versiones posteriores, haga doble clic en configuración de Microsoft .NET Framework 2.0 . El .NET Framework 2.0 configuración aparecerá la ventana.
  4. En el panel izquierdo, expanda Runtime Security Policy , expanda equipo y, a continuación, expanda Grupos de código .
  5. Haga clic con el botón secundario en All_Code y, a continuación, haga clic en nuevo . Aparecerá el Asistente Crear grupo de código.
  6. Asegúrese de que está seleccionado crear un nuevo grupo de código , escriba MyUserControlCodeGroup en el cuadro nombre y a continuación, haga clic en siguiente . Aparecerá la página Elija un tipo de condición .
  7. En la lista Elija el tipo de condición para este grupo de código , haga clic en Nombre a seguro .
  8. Haga clic en Importar . Aparecerá el cuadro de diálogo Importar seguro nombre de ensamblado .
  9. Busque el archivo de UserControl.dll que creó en la sección "Crear un control de usuario de Windows mediante Microsoft Visual C# .NET, Microsoft Visual C# 2005 o una versión posterior" y, a continuación, haga clic en Abrir .
  10. Haga clic en siguiente . Aparecerá la página asignar un conjunto de permisos para el grupo de código .
  11. Haga clic en usar existente conjunto de permisos , seleccione FullTrust en la lista y, a continuación, haga clic en siguiente . Aparecerá la página Finalización del Asistente para .
  12. Haga clic en Finalizar para cerrar al Asistente Crear grupos de código.

Cree un archivo HTML para llamar al control de usuario

Después de crear un grupo de código para asignar permisos para el ensamblado, debe crear un archivo HTML para llamar al control de usuario desde el explorador y debe configurar el entorno para asegurarse de que el control de usuario se denomina correctamente.
  1. Haga clic en Inicio , haga clic en Ejecutar , escriba notepad y, a continuación, haga clic en Aceptar .
  2. En el Bloc de notas, pegue el código siguiente:
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>
        
    </OBJECT> 
  3. En la carpeta raíz de Microsoft Internet Information Services (IIS), guarde el archivo como CallUserControl.htm.
  4. Copie el archivo UserControl.dll que creó en la sección "Crear un control de usuario de Windows mediante Microsoft Visual C# .NET, Microsoft Visual C# 2005 o una versión posterior" a la carpeta raíz IIS.
  5. Abra Microsoft Internet Explorer.
  6. En el cuadro dirección , escriba http://localhost/CallUserControl.htm y, a continuación, presione ENTRAR. Aparecerá el cuadro de diálogo Abrir .
  7. Busque cualquier archivo de texto y, a continuación, haga clic en Abrir . El texto del archivo aparece en el control ListBox en el explorador.

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
Configurar grupos de código mediante la herramienta Configuración de .NET Framework
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

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

Los ensamblados de .NET framework y el atributo AllowPartiallyTrustedCallers
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

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

Consideraciones de seguridad del ensamblado
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

Resúmenes de seguridad: los nombres seguros y de seguridad en .NET Framework
http://msdn2.microsoft.com/en-us/library/aa302416.aspx

Propiedades

Id. de artículo: 839300 - Última revisión: martes, 15 de julio de 2008 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Palabras clave: 
kbmt kbhowtomaster kbhowto kblistbox kbfileio kbdll kbcontrol kbweb kbuser kbsecurity kbpolicy kbopenfile KB839300 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 839300

Enviar comentarios

 

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