Академический Документы
Профессиональный Документы
Культура Документы
NET e IIS
Nota: La informacin de esta seccin se aplica a Servicios de Internet Information Server (IIS) 5, en ejecucin en Windows 2000. Las aplicaciones Web ASP.NET y los servicios Web se procesan mediante cdigo que se ejecuta en una nica instancia del proceso de trabajo de ASP.NET (aspnet_wp.exe), aunque en equipos de varios procesadores se pueden configurar varias instancias, una por procesador. IIS autentica a los llamadores y crea un testigo de acceso de Windows para el llamador. Si se habilita el acceso annimo en IIS, IIS crea un testigo de acceso de Windows para la cuenta de usuario de Internet annimo (normalmente, IUSR_MACHINE). Las solicitudes de tipos de archivos ASP.NET se controlan mediante una extensin ISAPI de ASP.NET (aspnet_isapi.dll), que se ejecuta en el espacio de direcciones del proceso de IIS (inetinfo.exe). Utiliza una canalizacin con nombre para comunicarse con el proceso de trabajo de ASP.NET, tal y como se muestra en la ilustracin 1. IIS pasa al proceso de trabajo de ASP.NET el testigo de acceso de Windows que representa al llamador. El mdulo de autenticacin de Windows de ASP.NET la utiliza para crear un objeto WindowsPrincipal y el mdulo de autorizacin de archivos de ASP.NET la utiliza para ejecutar comprobaciones de acceso a Windows para garantizar que el llamador est autorizado para tener acceso al archivo solicitado.
Nota: Los testigos de acceso dependen del proceso. Como resultado, la DLL de la ISAPI de ASP.NET que se ejecuta en inetinfo.exe llama a DuplicateHandle para
duplicar el identificador del testigo en el espacio de direcciones del proceso aspnet_wp.exe y pasa a continuacin el valor del identificador a travs de la canalizacin con nombre.
Aislamiento de aplicaciones
Para proporcionar aislamiento se utilizan dominios de aplicacin independientes en el proceso de trabajo (uno por cada directorio virtual IIS o, en otras palabras, uno por cada aplicacin Web ASP.NET o servicio Web). Se contrapone a la tecnologa ASP clsica, donde el nivel de proteccin de la aplicacin configurado en la metabase IIS determinaba si la aplicacin ASP deba ejecutarse en el proceso con IIS (inetinfo.exe), fuera del proceso en una instancia dedicada de Dllhost.exe o en una instancia compartida (agrupada) de Dllhost.exe. Importante: La configuracin de nivel de aislamiento del proceso en IIS no afecta al procesamiento de las aplicaciones Web ASP.NET.
Ms informacin
Para obtener ms informacin acerca de IIS6 consulte el artculo "IIS 6 Overview" en TechNet (http://www.microsoft.com/technet/treeview/default.asp?url=/TechNet/prodtechnol/iis/eval uate/iis6ovw.asp) (en ingls).
El modelo de canalizacin de ASP.NET est formado por un objeto HttpApplication, diversos objetos de mdulo HTTP y un objeto de controlador HTTP, junto con sus objetos asociados del generador de objetos, que se han omitido en la ilustracin 2 por cuestiones de claridad. Un objeto HttpRuntime se utiliza al inicio de la secuencia de procesamiento y un objeto HttpContext se utiliza en todo el ciclo de vida de una solicitud para proporcionar detalles acerca de la solicitud y la respuesta. En la siguiente lista se explican las responsabilidades y operaciones que ejecutan los objetos asociados a la canalizacin de procesamiento HTTP: Un objeto HttpRuntime examina la solicitud recibida de IIS y la distribuye a una instancia adecuada del objeto HttpApplication para procesar la solicitud. Hay un grupo de objetos HttpApplication en cada dominio de aplicacin de Aspnet_wp.exe. La asignacin es de uno a uno entre dominios de aplicacin, objetos HttpApplication y directorios virtuales IIS. En otras palabras, ASP.NET trata cada uno de los directorios virtuales IIS como aplicaciones independientes.
Nota: Hay una instancia de HttpRuntime en cada dominio de aplicacin Web. Los objetos HttpApplication controlan el procesamiento mediante canalizacin. Se crea un objeto HttpApplication individual para controlar cada solicitud HTTP simultnea. Los objetos HttpApplication se agrupan para mejorar el rendimiento. Los objetos de mdulo HTTP son filtros que procesan mensajes de solicitud y respuesta HTTP mientras se transmiten a travs de la canalizacin. Puede ver o modificar el contenido de los mensajes de solicitud y respuesta. Los mdulos HTTP son clases que implementan IHttpModule. Los objetos de controlador HTTP son los extremos de las solicitudes HTTP y proporcionan el procesamiento de solicitudes de determinados tipos de archivo. Por ejemplo, un controlador procesa solicitudes de archivos *.aspx mientras otro procesa solicitudes de archivos *.asmx. Se genera el mensaje de respuesta HTTP y se devuelve desde el controlador HTTP. Los controladores HTTP son clases que implementan IHttpHandler. En toda la canalizacin se utiliza un objeto HttpContext para representar la solicitud y respuesta Web actual. Est disponible para todos los mdulos de la canalizacin y para el objeto de controlador al final de la canalizacin. El objeto HttpContext expone diversas propiedades; por ejemplo, la propiedad User que contiene un objeto IPrincipal que representa al llamador.
Los mdulos de autenticacin enlazan el evento AuthenticateRequest, mientras que los mdulos de autorizacin enlazan el evento AuthorizeRequest. La solicitud pasa por cada mdulo de la canalizacin, aunque slo se carga un nico mdulo de autenticacin. Depende de la configuracin del elemento <authentication> en el archivo Web.config. Por ejemplo, el elemento <authentication> siguiente provoca la carga de WindowsAuthenticationModule.
<authentication mode="Windows" />
El mdulo de autenticacin activado es responsable de la creacin de un objeto IPrincipal y de su almacenamiento en la propiedad HttpContext.User. Es fundamental, ya que los mdulos de autorizacin indirectos utilizan este objeto IPrincipal para tomar decisiones de autorizacin. Si no hay autenticacin (por ejemplo, cuando se habilita el acceso annimo en IIS y se configura ASP.NET con <authentication mode="None" />), hay un mdulo no configurado especial que incluye un principal annimo predeterminado en la propiedad HttpContext.User. Como resultado, HttpContext.User tiene siempre un valor distinto de NULL tras la autenticacin. Si implementa un mdulo de autenticacin personalizado, el cdigo del mdulo personalizado debe crear un objeto IPrincipal y almacenarlo en HttpContext.User. Nota: ASP.NET tambin conecta Thread.CurrentPrincipal segn el valor de HttpContext.User tras el evento AuthenticateRequest. HttpApplication activa el evento AuthenticateRequest, que puede enlazarse en global.asax. De esta forma se puede insertar cdigo de procesamiento personalizado, por ejemplo, para cargar el conjunto de funciones asociadas al usuario actual. Sin embargo, tenga en cuenta que WindowsAuthenticationModule lo realiza automticamente. La lista de funciones se obtiene del conjunto de grupos de Windows a los que pertenece el usuario de Windows autenticado. Una vez que el mdulo de autenticacin adecuado finaliza el procesamiento, se llama a los mdulos de autorizacin si no se ha anulado la solicitud. Cuando se llama a UrlAuthorizationModule, comprueba la existencia de la etiqueta <authorization> en Machine.config y Web.config. Si existe, recupera el objeto IPrincipal de HttpContext.User y comprueba si el usuario est autorizado para tener acceso al recurso solicitado mediante el verbo especificado (GET, POST, etc.). Si el usuario no est autorizado, UrlAuthorizationModule llama a HttpApplication.CompleteRequest, que anula el procesamiento normal del mensaje. UrlAuthorizationModule devuelve un cdigo de estado HTTP 401.
A continuacin, se llama a FileAuthorizationModule. Comprueba si el objeto IIdentity de HttpContext.User.Identity es una instancia de la clase WindowsIdentity. Si el objeto IIdentity no es de la clase WindowsIdentity, FileAuthorizationModule no sigue procesando. Si existe la clase WindowsIdentity, FileAuthorizationModule llama a la API AccessCheck (mediante P/Invoke) para ver si el llamador autenticado (cuyo testigo de acceso ha sido pasado a ASP.NET por IIS y expuesto por el objeto WindowsIdentity) est autorizado para tener acceso al archivo solicitado. Si el descriptor de seguridad del archivo contiene al menos una entrada ACE de lectura en su DACL, la solicitud puede proseguir. De lo contrario, FileAuthorizationModule llama a HttpApplication.CompleteRequest y devuelve un cdigo de estado 401.
Recuerde que en la autenticacin mediante Formularios se implementa el evento Application_Authenticate en Global.asax. En la autenticacin mediante Formularios se produce la siguiente secuencia: En este cdigo puede crear un objeto IPrincipal y almacenarlo en HttpContext.User, que suele contener la lista de funciones recuperadas del almacn de datos personalizado (normalmente una base de datos de SQL Server o Active Directory). El objeto IPrincipal suele ser una instancia de la clase GenericPrincipal pero tambin podra ser una clase IPrincipal personalizada. FormsAuthenticationModule comprueba si se ha creado un objeto IPrincipal. Si es as, lo utilizan los mdulos de autorizacin indirectos. Si no se ha creado, FormsAuthenticationModule crea un GenericPrincipal (sin funciones) y lo almacena en el contexto. Si no hay informacin de funciones, habr errores en las comprobaciones de autorizacin (como las peticiones PrincipalPermssion) que soliciten la pertenencia a una funcin. UrlAuthorizationModule controla el evento AuthorizeRequest. Sus decisiones de autorizacin se basan en el objeto IPrincipal contenido en HttpContext.User.
En la autenticacin de Windows se produce la siguiente secuencia: 1. WindowsAuthenticationModule crea un objeto WindowsPrincipal mediante el testigo de acceso de Windows que IIS pasa a ASP.NET. 2. Utiliza P/Invoke para llamar a las funciones Win32 para obtener la lista de grupos de Windows a los que pertenece el usuario. Se utilizan para llenar la lista de funciones WindowsPrincipal.
3. Almacena el objeto WindowsPrincipal en HttpContext.User, para que puedan utilizarlo los mdulos de autorizacin indirectos.
Control de eventos
El objeto HttpApplication activa el conjunto de eventos que aparecen en la tabla 1. Cada uno de los mdulos HTTP puede enlazar dichos eventos (proporcionando sus propios controles de eventos). Tabla 1: Eventos activados por los objetos HttpApplication Evento
BeginRequest AuthenticateRequest AuthorizeRequest ResolveRequestCache AcquireRequestState PreRequestHandlerExecute PostRequestHandlerExecute ReleaseRequestState UpdateRequestCache EndRequest PreSendRequestHeaders PreSendRequestContent
Notas
Se activa antes de iniciar el procesamiento de la solicitud Para autenticar al llamador Para realizar comprobaciones de acceso Para obtener una respuesta de la cach Para cargar el estado de la sesin Se activa inmediatamente antes de enviar la solicitud al objeto de controlador Se activa inmediatamente despus de enviar la solicitud al objeto de controlador Para almacenar el estado de la sesin Para actualizar la cach de respuesta Se activa tras finalizar el procesamiento Se activa antes de enviar los encabezados de respuesta almacenados en bfer Se activa antes de enviar el cuerpo de respuesta almacenado en bfer
Nota: El controlador HTTP se ejecuta entre los eventos PreRequestHandlerExecute y PostRequestHandlerExecute. Los ltimos dos eventos no son deterministas y pueden producirse en cualquier momento (por ejemplo, como resultado de Response.Flush). Todos los dems eventos son secuenciales. No es necesario implementar un mdulo HTTP simplemente para enlazar uno de estos eventos. Puede agregar controladores de eventos a Global.asax. Adems de los eventos de la tabla 1 (que pueden enlazarse mediante objetos de mdulo HTTP individuales), el objeto HttpApplication activa los controladores Application_OnStart y Application_OnEnd, ya conocidos para los desarrolladores de ASP. Slo pueden controlarse en Global.asax. Por ltimo, puede implementar adems controladores de eventos personalizados en Global.asax para los eventos activados por objetos de mdulo HTTP individuales. Por ejemplo, el mdulo de estado de la sesin activa los eventos Session_OnStart y Session_OnEnd.
1. Cree una clase que implemente IHttpModule. 2. Inserte el ensamblado que contiene el mdulo en el subdirectorio \bin de la aplicacin o instlelo en la cach de ensamblados global. 3. Agregue un elemento <HttpModules> al archivo Web.config de la aplicacin, tal y como se muestra a continuacin.
<system.web> <httpModules> <add name="modulename" type="namespace.classname,assemblyname" /> </httpModules> </system.web>