System.Security.SecurityException cuando el directorio virtual apunta a un recurso compartido remoto en ASP.NET

Este artículo le ayuda a resolver el problema que System.Security.SecurityException se puede producir cuando se usa un directorio virtual que apunta a un recurso compartido remoto para hospedar una ASP de Microsoft. Aplicación basada en NET.

              Versión original del producto: ASP.NET
Número de KB original: 320268

Síntomas

Cuando se usa un directorio virtual que apunta a un recurso compartido remoto para hospedar una ASP. Aplicación basada en NET, puede recibir un mensaje de error similar a uno de los ejemplos siguientes:

  • Mensaje 1

    Descripción de la excepción de seguridad: la aplicación intentó realizar una operación no permitida por la directiva de seguridad. Para conceder a esta aplicación el permiso necesario, póngase en contacto con el administrador del sistema o cambie el nivel de confianza de la aplicación en el archivo de configuración.
    Detalles de la excepción: System.Security.SecurityException: error de seguridad.
    Error de origen:
    Línea 30: bool estático privado __intialized = false; Línea 31: Línea 32: public Global_asax() { Line 33: if ((ASP. Global_asax.__intialized == false)) { Línea 34: ASP. Global_asax.__intialized = true;

  • Mensaje 2

    Error del servidor en la aplicación /ApplicationName.
    Descripción del error del analizador: error durante el análisis de un recurso necesario para atender esta solicitud. Revise los siguientes detalles específicos del error de análisis y modifique el archivo de origen correctamente.
    Mensaje de error del analizador: no se pudo cargar el tipo ApplicationName.Global.
    Error de origen: Línea 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Source File: Path of Application\global.asax Line: 1

Causa

El System.Web espacio de nombres no tiene el AllowPartiallyTrustedCallersAttribute objeto aplicado. Para obtener más información, visite patrones & prácticas.

Cualquier código que no esté en el grupo de código My_Computer_Zone que no tenga este atributo requiere el derecho de usuario FullTrust . Por lo tanto, el recurso compartido remoto que contiene el contenido de las aplicaciones web requiere FullTrust.

Solución

Para resolver este comportamiento, conceda el derecho FullTrust al recurso compartido remoto:

  1. En el servidor web, abra Herramientas administrativas y haga doble clic en Configuración de Microsoft .NET Framework.

  2. Expanda Directiva de seguridad en tiempo de ejecución, máquina y grupos de código.

  3. Haga clic con el botón derecho en All_Code y, a continuación, seleccione Nuevo.

  4. Select Create a new code group. Asigne al grupo de código un nombre relevante, como el nombre del recurso compartido de aplicaciones. Seleccione Siguiente.

  5. En la lista Choose the condition type for this code group (Elegir el tipo de condición para este grupo de código ), seleccione URL.

  6. En el cuadro URL , escriba la ruta de acceso del recurso compartido en el formato siguiente:
    file:////\\computername\\sharename\*

    Nota:

    Reemplace computername por el nombre del equipo que hospeda el recurso compartido remoto. Reemplace sharename por el nombre del recurso compartido.

  7. Seleccione Siguiente. En la página siguiente, seleccione Usar un conjunto de permisos existente y, a continuación, seleccione FullTrust.

  8. Seleccione Siguiente y, a continuación, seleccione Finalizar.

  9. Reinicie Internet Information Services (IIS) para reiniciar el proceso de trabajo de ASP.NET.

Si la configuración de Microsoft .NET Framework no se muestra en Herramientas administrativas, puede instalar el Kit de desarrollo de software (SDK) de .NET Framework para agregar la configuración de Microsoft .NET Framework. En su lugar, puede ejecutar el siguiente comando para realizar el cambio:

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

Para obtener más información sobre lo que hacen estos argumentos, ejecute el siguiente comando:

caspol.exe -?

Estado

Este comportamiento es una característica del diseño de la aplicación.

Más información

En esta configuración, la cuenta con la que se ejecuta el proceso de trabajo de ASP.NET debe tener derechos suficientes para el recurso compartido remoto. Puede establecer la cuenta con la que se ejecuta el proceso de trabajo mediante la <processmodel> etiqueta del archivo Machine.config .

Pasos para reproducir este comportamiento

  1. Cree un nuevo directorio virtual que apunte a un recurso compartido remoto.
  2. Cree una aplicación para el directorio virtual. Asegúrese de que el usuario que se conecta al recurso compartido tiene acceso de lectura al contenido remoto.
  3. En la <processmodel> etiqueta del archivo Machine.config , cambie el usuario a un usuario de dominio que tenga permisos de lista, lectura y ejecución en el recurso compartido remoto.
  4. Cree un archivo .aspx insertado y, a continuación, coloque el archivo en el recurso compartido remoto.
  5. Realice una solicitud para la página.

Referencias

Para obtener más información sobre los permisos que requiere la cuenta ASPNET para ejecutar aplicaciones ASP.NET, consulte Introducción a ASP.NET Identity. Para obtener más información sobre la seguridad de ASP.NET, vea INFORMACIÓN general sobre la seguridad de ASP.NET.