2010-06-18 26 views
18

Después del despliegue de la nueva versión de nuestra aplicación ASP.NET 2.0, comenzó a aumentar la excepción de seguridad: "System.Security.SecurityException: solicitud del permiso de tipo 'System.Web.AspNetHostingPermission, System, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' failed. ".Excepciones de seguridad en ASP.NET y la opción Cargar perfil de usuario en IIS 7.5

Después de una búsqueda rápida en Internet, pudimos resolver este problema configurando "Cargar perfil de usuario" en True en el grupo de aplicaciones de IIS 7.5. Esta solución también se menciona varias veces aquí en stackoverflow:

Sin embargo no hemos podido encontrar por lo que tiene que ser verdad. Revisamos todos los cambios en la nueva versión (afortunadamente solo había unos pocos), pero no encontramos nada sospechoso (sin acceso a los datos de registro o temperatura, como sugerían algunos artículos, etc.). ¿Podría alguien darnos pistas cuando una aplicación ASP.NET alojada en IIS 7.5 necesita la opción "Cargar perfil de usuario" establecida en True?

Detalles:

    piscina
  • Aplicación: .NET 2.0; Modo de canal gestionado: clásico; Identidad - cuenta de dominio personalizado
  • En IIS 6.0 (W2K3): Vieja y nueva versión de trabajo de aplicación bien
  • En IIS 7.5 (W2K8-R2): Versión antigua de aplicación funciona bien; nueva versión de la aplicación aumenta la seguridad excepción - que comienza a trabajar después de ajuste “Cargar perfil de usuario” True

Gracias!

EDIT: ¡Finalmente hemos encontrado la causa de este problema! Nuestro administrador utilizó una técnica diferente para copiar la nueva versión de la aplicación del entorno de ensayo al entorno de producción. Él utilizó el servidor web como intermediario. Después de descargar los artefactos de compilación de liberación comprimida al entorno de producción y luego descomprimir los archivos, aún se marcaron como "bloqueados" porque procedían de una computadora diferente. Vea también https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET luego ejecuta lógicamente estos archivos binarios en confianza parcial en lugar de confianza total y que en realidad causaba las excepciones de seguridad mencionadas en nuestra aplicación.

Al establecer "Cargar perfil de usuario" en True se corrigieron las excepciones de seguridad como efecto colateral. Si "Cargar perfil de usuario" está configurado en Falso, entonces nuestra aplicación (no nuestro código, tal vez algunos).NET BCL o ensamblado externo) está intentando consultar información básica sobre el directorio "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files" que no permite la identidad del grupo de aplicaciones:

  • con plena confianza: acceso denegado a esta operación de consulta no plantea ninguna excepción
  • con confianza parcial: acceso denegado a esta operación de consulta plantea excepción de seguridad

Si "Cargar perfil de usuario" es establecido en True, el perfil temporal en el directorio Users se crea cada vez que se inicia el grupo de aplicaciones. Nuestra aplicación está tratando de consultar información sobre el directorio "Archivos temporales de Internet" de este perfil, que permite la identidad del grupo de aplicaciones. Por lo tanto, no se levanta ninguna excepción incluso con confianza parcial.

¡Sesión de solución de problemas realmente agradable! :)

+0

Gracias por el trabajo de investigación Peter, tuve el mismo problema y la utilidad streams (enumerada en la pregunta superuser.com) fue cómo desbloqueé todos los archivos en el directorio de mi webapp. ¡Y ahora puedo desactivar la opción Cargar perfil de usuario! –

+1

Totalmente excelente, acabamos de encontrarnos con este problema y no pudimos explicarlo correctamente. –

+0

a continuación la respuesta tiene la explicación detallada http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool –

Respuesta

7

Un ejemplo más cuando la configuración "Cargar perfil de usuario" podría ayudarle con el uso de archivos temporales. En algún momento, este uso puede ser indirecto. SQL Express, por ejemplo, puede hacer esto en algunas situaciones.

Así que mi consejo. Desactive "Cargar perfil de usuario" y examine% TEMP%. A continuación, intente otorgarle a la cuenta de dominio utilizada para el conjunto de aplicaciones el acceso completo (o cambiar el acceso) al directorio desde% TEMP%. Probablemente solucione tu problema.

Un consejo más es el uso de Process Monitor (consulte http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) para ubicar qué partes del perfil de usuario se usarán (o recibir un error de "acceso denegado") en el momento en que recibe "System.Security.SecurityException: Request for el permiso de tipo 'System.Web.AspNetHostingPermission' excepción.

+1

Gracias por su consejo. Nos ayudó a solucionar el problema. La identidad del grupo de aplicaciones necesita acceso de lectura al directorio "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files". La aplicación solo consulta información básica para este directorio y eso es todo. Probablemente sea causado por uno de los ensambles externos que usamos (sospechamos iTextSharp). De todos modos, su consejo nos ayudó a explicar la situación, así que gracias de nuevo. – Peter

+0

¡Bienvenido Peter! – Oleg

+0

¿Es posible establecer 'LoadUserProfile = true' en IIS y cambiar la ubicación de la carpeta temporal predeterminada% TEMP% de' C: \ Users \ C: \ Users \ AccountName \ AppData \ Local \ Temp' a otro lugar? –

0

Otra área donde LoadUserProfile podría ayudar es cuando se configura un enlace confiable de MSMQ en WCF. Si el grupo de aplicaciones se ejecuta bajo una cuenta de confianza, esto no cargará el SID a menos que la configuración del perfil de usuario de carga del grupo de aplicaciones se establezca en verdadero y, por lo tanto, la autenticación fallará.

1

También encontré el mismo problema y pude resolver el problema estableciendo load user profile = true. Sin embargo, he revertido la carga del perfil de usuario = falso y reinicié el grupo de aplicaciones, pero ahora no recibo ninguna excepción. He revisado todas las publicaciones relacionadas en stackoverflow y también en Asp.net y en las páginas de foros de iis.

Cuestiones relacionadas