Sunteți pe pagina 1din 30

De la seguridad en Servicios Web para .

Net
Este escrito se centra en la seguridad de los servicios Web en el nivel de la plataforma, mediante las caractersticas subyacentes de IIS y ASP.NET. Para la seguridad de los mensajes, Microsoft est desarrollando el kit de desarrollo de servicios Web, que permite generar soluciones de seguridad conforme a la especificacin WS-Security, que forma parte de la iniciativa Global XML Architecture (GXA).

Contenido
Modelo de seguridad para los servicios Web Arquitectura de seguridad para plataformas/transporte Estrategias de autenticacin y autorizacin Configurar la seguridad Transmitir credenciales para la autenticacin de servicios Web Transferir el llamador original Subsistema de confianza Obtener acceso a recursos del sistema Obtener acceso a recursos de red Obtener acceso a los objetos COM Utilizar certificados de cliente con los servicios Web Comunicacin segura Resumen En este captulo se describe cmo desarrollar y aplicar las tcnicas de autenticacin, autorizacin y comunicacin seguras para proteger los servicios Web de ASP.NET y los mensajes de los servicios Web. Tambin se describe la seguridad desde el punto de vista de los servicios Web y se explica cmo autenticar y autorizar los llamadores, adems de cmo transferir el contexto de seguridad a travs de los servicios Web. Encontrar tambin informacin, desde la perspectiva del cliente, para llamar a los servicios Web mediante credenciales y certificados para admitir la autenticacin por parte del servidor.

Modelo de seguridad para los servicios Web


La seguridad de los servicios Web puede aplicarse en tres niveles distintos: Seguridad (de punto a punto) para plataformas/transporte Seguridad (personalizada) para aplicaciones

Seguridad (de extremo a extremo) para mensajera Cada enfoque ofrece una serie de beneficios y desventajas, que se detallan a continuacin. La eleccin del enfoque depende en gran medida de las caractersticas de la arquitectura y las plataformas que vayan a utilizarse para el intercambio de los mensajes. Nota: tenga en cuenta que este captulo se centra en la seguridad de plataformas y aplicaciones. La seguridad de los mensajes se efecta mediante la iniciativa de arquitectura de servicios Web XML global (GXA) y, en especial, la especificacin de seguridad WS-Security. Durante el perodo de escritura de este documento, Microsoft ha lanzado una versin de tecnologa de prueba de Web Services Development Kit (WSDK). De este modo podr desarrollar soluciones de seguridad para mensajera conformes a la especificacin de seguridad WSSecurity. Si desea obtener ms informacin, consulte http://msdn.microsoft.com/webservices/building/wsdk/ (en ingls).

Seguridad (de punto plataformas/transporte

punto)

para

Puede utilizarse el canal de transporte entre dos puntos finales (cliente de servicios Web y servicios Web) para garantizar la seguridad de punto a punto. La ilustracin 10.1 refleja este escenario.

{Insert figure: CH10 Web Services Security Transport Level.gif} Ilustracin 10.1
Seguridad para plataformas/transporte

Cuando se utiliza la seguridad de plataformas, que presupone un entorno de sistema operativo Microsoft Windows estrechamente integrado, por ejemplo, en intranets corporativas: El servidor Web (IIS) proporciona autenticacin bsica, implcita, integrada y mediante certificados. El Servicio Web de ASP.NET hereda algunas funciones de autenticacin y autorizacin de ASP.NET. Puede utilizarse SSL y/o IPSec para aplicar capacidades de integridad y confidencialidad para los mensajes.

Escenarios de uso
El modelo de seguridad para transporte es sencillo, bien diseado y adecuado para una gran variedad de escenarios (bsicamente para intranets), en los que los

mecanismos de transporte y la configuracin del punto final pueden controlarse de forma exhaustiva. Los principales aspectos que deben tenerse en cuenta con relacin a la seguridad del transporte son los siguientes: La seguridad se integra estrechamente con la plataforma subyacente, el mecanismo de transporte y el proveedor de servicios de seguridad (NTLM, Kerberos, etc.), de los que tambin depende. La seguridad se aplica de punto a punto, sin crear provisiones para saltos mltiples ni enrutamiento a travs de nodos de aplicacin intermedios.

Seguridad para aplicaciones


Con este enfoque, la aplicacin se hace cargo de la seguridad y utiliza las funciones de seguridad personalizadas. Por ejemplo: Una aplicacin puede utilizar un encabezado SOAP personalizado para transferir las credenciales de usuario y autenticar al usuario con cada solicitud de Servicio Web. Un enfoque habitual consiste en transferir un vale (o nombre de usuario o licencia) con el encabezado SOAP. La aplicacin tiene la flexibilidad de generar su propio objeto IPrincipal con funciones incluidas. Puede ser una clase personalizada o la clase GenericPrincipal que se proporciona con .NET Framework. La aplicacin cifra de forma selectiva lo que sea necesario, aunque requiere un almacenamiento seguro de la clave y que los desarrolladores tengan conocimientos de las API de criptografa pertinentes. Una tcnica alternativa consiste en utilizar SSL para ofrecer confidencialidad e integridad, adems de combinar SSL con encabezados SOAP personalizados para llevar a cabo la autenticacin.

Escenarios de uso
Utilice este enfoque si: Desea aprovechar un esquema existente de base de datos de usuarios y funciones que se utiliza con la aplicacin actual. Desea cifrar partes de un mensaje en lugar de la cadena de datos completa.

Seguridad (de extremo a extremo) para mensajera


Se trata del enfoque ms flexible y eficaz y el que utiliza la iniciativa GXA, en especial para la especificacin de seguridad WS-Security. La seguridad de mensajes queda esbozada en la ilustracin 10.2.

{Insert figure: CH10 - Web Services Security Message Level.gif}

Ilustracin 10.2
Seguridad de mensajes

Las especificaciones de seguridad WS-Security describen las mejoras realizadas en la mensajera SOAP y que permiten disfrutar de integridad, confidencialidad y autenticacin para los mensajes. La autenticacin se obtiene mediante testigos de seguridad, que se transfieren en encabezados SOAP. La especificacin de seguridad WS-Security no requiere ningn tipo de testigo especfico. Los testigos de seguridad pueden incluir vales Kerberos, certificados X.509 o un testigo binario personalizado. La comunicacin segura se obtiene mediante firmas digitales que garantizan la integridad de los mensajes y el cifrado XML para la confidencialidad de los mensajes.

Escenarios de uso
La especificacin de seguridad WS-Security puede utilizarse para crear un marco de intercambio de mensajes seguros en un entorno de servicios Web heterogneo. Resulta idnea para entornos y escenarios heterogneos en los que no se detenta el control directo ni de la configuracin de los puntos finales ni de los nodos de aplicacin intermedios. Seguridad de mensajes: Puede ser independiente del transporte subyacente. Permite una arquitectura de seguridad heterognea. Proporciona seguridad de extremo a extremo y permite el enrutamiento de mensajes a travs de nodos de aplicacin intermedios. Admite varias tecnologas de cifrado. Admite el mtodo de no rechazo.

Web Services Development Kit (WSDK)


Web Services Development Kit ofrece las API necesarias para administrar la seguridad, adems de otros servicios tales como referencias de enrutamiento y de mensajes. Este kit cumple los estndares ms recientes de los servicios Web como la especificacin de seguridad WS-Security, lo cual permite la interoperabilidad con otros proveedores que aplican las mismas especificaciones.

Ms informacin
Para obtener las ltimas novedades acerca de Web Services Development Kit y la especificacin de seguridad WS-Security, consulte la pgina del centro de desarrolladores XML de MSDN en http://msdn.microsoft.com/webservices/ (en ingls). Para obtener ms informacin acerca de la especificacin de seguridad WSSecurity, consulte la pgina de ndice de la especificacin de seguridad WSSecurity en http://msdn.microsoft.com/webservices/default.asp?pull=/library/enus/dnglobspec/html/wssecurspecindex.asp (en ingls). Para obtener ms informacin acerca de la arquitectura GXA, consulte el artculo "Understanding GXA" (en ingls) de MSDN. Para obtener acceso a las discusiones del tema, consulte el grupo de noticias de interoperabilidad GXA en MSDN.

Arquitectura de plataformas/transporte

seguridad

para

La ilustracin 10.3 muestra la arquitectura de seguridad de la plataforma de servicios Web de ASP.NET.

{Insert figure: CH10 - Web Services Security Architecture.gif} Ilustracin 10.3


Arquitectura de seguridad de servicios Web

La ilustracin 10.3 muestra los mecanismos de autenticacin y autorizacin que incluyen los servicios Web de ASP.NET. Cuando un cliente llama a un servicio Web, se desencadena la siguiente secuencia de eventos de autenticacin y autorizacin: 1. Se recibe la solicitud SOAP de la red. Dicha solicitud puede o no contener credenciales de autenticacin, lo que depende del tipo de autenticacin que se est utilizando. 2. Opcionalmente, IIS autentica al llamador mediante la autenticacin bsica, implcita, integrada (NTLM o Kerberos) o mediante certificados. En entornos heterogneos en los que no es posible aplicar la autenticacin de IIS (Windows), IIS se configura para la autenticacin annima. En este escenario, el cliente puede autenticarse mediante atributos de los mensajes tales como vales transferidos a travs del encabezado SOAP. 3. IIS tambin puede configurarse para que acepte solicitudes nicamente de los equipos cliente con unas direcciones IP especficas. 4. IIS transfiere el testigo de acceso a Windows del llamador autenticado a ASP.NET (que puede ser el testigo de acceso del usuario de Internet annimo si se ha configurado el servicio Web para la autenticacin annima).

5. ASP.NET autentica al llamador. Cuando ASP.NET se configura para la autenticacin de Windows, no se efecta ningn otro tipo de autenticacin adicional en esta etapa e IIS se limita a autenticar al llamador. En caso de utilizare un mtodo de autenticacin distinto de Windows, el modo de autenticacin de ASP.NET se establece en ninguno a fin de permitir la autenticacin personalizada. Nota: la autenticacin mediante Formularios y la autenticacin de Passport no son compatibles con los servicios Web. 6. ASP.NET autoriza el acceso al servicio Web solicitado (archivo .asmx) mediante la autorizacin de direcciones URL y de archivos, que utilizan los permisos NTFS asociados con el archivo .asmx para determinar si debe concederse el acceso al llamador autenticado. Nota: la autorizacin de archivos slo es compatible para la autenticacin de Windows. A fin de disfrutar de una autorizacin de granularidad precisa, tambin pueden utilizarse las funciones .NET (mediante declaraciones o programacin) para garantizar que el llamador reciba autorizacin para obtener acceso al recurso solicitado o para llevar a cabo la operacin solicitada. 7. El cdigo del servicio Web obtiene acceso a los recursos locales o remotos mediante una identidad determinada. De forma predeterminada, los servicios Web de ASP.NET no llevan a cabo ninguna suplantacin, por lo que es la cuenta de proceso ASP.NET configurada la que proporciona la identidad. Otras opciones alternativas incluyen la identidad del llamador original o una identidad de servicio configurada.

Equipos selectores
Los equipos selectores del servicio Web de ASP.NET son: IIS Si se deshabilita la autenticacin annima de IIS, los servicios IIS slo permitirn solicitudes de usuarios autenticados. Restricciones de direccin IP IIS puede configurarse para que acepte solicitudes nicamente de equipos con unas direcciones IP especficas. ASP.NET El mdulo HTTP de autorizacin de archivos (exclusivamente para la autenticacin de Windows) El mdulo HTTP de autorizacin mediante direcciones URL Peticiones de permisos Principal y comprobaciones de funciones explcitas

Ms informacin
Para obtener ms informacin acerca de los equipos selectores, consulte "Equipos selectores" en el captulo 8, "Seguridad de ASP.NET". Para obtener ms informacin acerca de cmo configurar la seguridad, consulte el apartado "Configurar la seguridad" que figura ms adelante en este mismo captulo.

Estrategias de autenticacin y autorizacin


En esta seccin se exponen las opciones de autorizacin (tanto configurables como programticas) disponibles para un conjunto de esquemas de autenticacin utilizados de forma habitual. Los esquemas de autenticacin que van a describirse se indican a continuacin: Autenticacin de Windows con suplantacin Autenticacin de Windows sin suplantacin Autenticacin de Windows con identidad fija

Autenticacin de Windows con suplantacin


Los siguientes elementos de configuracin muestran cmo habilitar la autenticacin de Windows (IIS) y la suplantacin mediante declaraciones en los archivos Web.config o Machine.config. Nota: es recomendable configurar la autenticacin en funcin de cada servicio Web en el archivo Web.config del servicio Web correspondiente.

<authentication mode="Windows" /> <identity impersonate="true" />

Con esta configuracin, el cdigo del servicio Web suplanta al llamador autenticado por IIS. Para suplantar al llamador original es preciso desactivar el acceso annimo en IIS. En caso de utilizar el acceso annimo, el cdigo del servicio Web suplanta la cuenta de usuario de Internet annimo (que, de manera predeterminada, es IUSR_MACHINE).

Seguridad configurable
El empleo de la autenticacin de Windows junto con la funcionalidad de suplantacin ofrece las siguientes opciones de autorizacin: Listas ACL de Windows Archivo del servicio Web (.asmx). La autorizacin de archivos lleva a cabo comprobaciones de acceso para los recursos ASP.NET solicitados (que incluye el archivo del servicio Web .asmx) mediante el contexto de seguridad del llamador original. Es preciso que el llamador original reciba, como mnimo, acceso de lectura al archivo .asmx. Recursos a los que obtiene acceso el servicio Web. Las listas ACL de Windows de los recursos a los que obtiene acceso el servicio Web (archivos, carpetas, claves de registro, objetos de servicio del directorio Active Directory, etc.) deben incluir una entrada de control de acceso (ACE) que conceda acceso de lectura al llamador original (puesto que el subproceso del servicio Web utilizado para el acceso a los recursos ejecuta la suplantacin del llamador). Autorizacin mediante direcciones URL. Se configura en el archivo Machine.config o Web.config. Con la autenticacin de Windows, los nombres de usuario adoptan la forma DomainName\UserName (NombreDominio\NombreUsuario) y las funciones se asignan una a una a los grupos de Windows.
<authorization> <deny user="DomainName\UserName" /> <allow roles="DomainName\WindowsGroup" />

</authorization>

Seguridad mediante programacin


La seguridad mediante programacin hace referencia a las comprobaciones de seguridad ubicadas en el cdigo del servicio Web. Las siguientes opciones de seguridad mediante programacin estn disponibles cuando se utilizan la autenticacin de Windows y la suplantacin. Peticiones de permisos Principal Imperativas (en las lneas del cdigo de un mtodo)
PrincipalPermission permCheck = new PrincipalPermission( null, @"DomainName\WindowsGroup"); permCheck.Demand();

Declarativas (estos atributos pueden figurar antes de los mtodos o las clases Web)
// Demand that the caller is a member of a specific role (for Windows // authentication this is the same as a Windows group) [PrincipalPermission(SecurityAction.Demand, Role=@"DomainName\WindowsGroup)] // Demand that the caller is a specific user [PrincipalPermission(SecurityAction.Demand, Name=@"DomainName\UserName")]

Comprobaciones de funciones explcitas. Puede realizar la comprobacin de funciones mediante la interfaz IPrincipal.
IPrincipal.IsInRole(@"DomainName\WindowsGroup");

Escenarios de uso
Utilice la autenticacin de Windows y la suplantacin cuando se den las siguientes condiciones: Los clientes del servicio Web pueden identificarse mediante cuentas de Windows, que a su vez puede autenticar el servidor. Debe transferirse el contexto de seguridad del llamador original al siguiente nivel a travs del servicio Web. Por ejemplo, a un conjunto de componentes revisados que utilizan funciones de Servicios Empresariales (COM+) o a un nivel de datos que precisa autorizacin de granularidad fina (por usuario). Debe transferir el contexto de seguridad del llamador original a los niveles indirectos a fin de admitir la auditora de nivel del sistema operativo. Importante: el uso de la suplantacin reduce la escalabilidad porque incide en la agrupacin de conexiones de bases de datos. A modo de enfoque alternativo, es recomendable plantearse la posibilidad de utilizar un modelo de subsistema de confianza en el que el servicio Web autorice a los llamadores y, a continuacin, utilice una identidad fija para obtener el acceso a la base de datos. La identidad del llamador se transfiere desde la aplicacin; por ejemplo, mediante los parmetros de procedimiento almacenados.

Ms informacin
Si desea obtener ms informacin acerca de la autenticacin de Windows y la suplantacin, consulte el captulo 8 "Seguridad de ASP.NET". Para obtener ms informacin acerca de la autorizacin mediante direcciones URL, consulte "Notas acerca de la autorizacin mediante direcciones URL" en el captulo 8, "Seguridad de ASP.NET".

Autenticacin de Windows sin suplantacin


Los siguientes elementos de configuracin muestran cmo habilitar la autenticacin de Windows (IIS) sin suplantacin de forma declarativa en el archivo Web.config.
<authentication mode="Windows" /> <!-- The following setting is equivalent to having no identity element --> <identity impersonate="false" />

Seguridad configurable
El empleo de la autenticacin de Windows sin la suplantacin ofrece las siguientes opciones de autorizacin: Listas ACL de Windows Archivo del servicio Web (.asmx). La autorizacin de archivos lleva a cabo comprobaciones de acceso para los recursos ASP.NET solicitados (que incluye el archivo del servicio Web .asmx) mediante el llamador original. No se requiere la suplantacin. Recursos a los que obtiene acceso la aplicacin. Las listas ACL de Windows de los recursos a las que obtiene acceso la aplicacin (archivos, carpetas, claves de registro, objetos de Active Directory) deben incluir una entrada ACE que conceda acceso de lectura a la identidad del proceso de ASP.NET (la identidad predeterminada que utiliza el subproceso del servicio Web para obtener acceso a los recursos). Autorizacin de URL Se configura en los archivos Machine.config y Web.config. Con la autenticacin de Windows, los nombres de usuario adoptan la forma DomainName\UserName (NombreDominio\NombreUsuario) y las funciones se asignan una a una a los grupos de Windows.
<authorization> <deny user="DomainName\UserName" /> <allow roles="DomainName\WindowsGroup" /> </authorization>

Seguridad mediante programacin


La seguridad mediante programacin hace referencia a las comprobaciones de seguridad ubicadas en el cdigo del servicio Web. Las siguientes opciones de seguridad mediante programacin estn disponibles cuando se utiliza la autenticacin de Windows sin suplantacin. Peticiones de permisos Principal Imperativas
PrincipalPermission permCheck = new PrincipalPermission( null, @"DomainName\WindowsGroup");

permCheck.Demand();

Declarativas
// Demand that the caller is a member of a specific role (for Windows // authentication this is the same as a Windows group) [PrincipalPermission(SecurityAction.Demand, Role=@"DomainName\WindowsGroup)] // Demand that the caller is a specific user [PrincipalPermission(SecurityAction.Demand, Name=@"DomainName\UserName")]

Comprobaciones de funciones explcitas. Puede realizar la comprobacin de funciones mediante la interfaz IPrincipal.
IPrincipal.IsInRole(@"DomainName\WindowsGroup");

Escenarios de uso
Utilice la autenticacin de Windows sin suplantacin cuando se den las siguientes condiciones: Los clientes del servicio Web pueden identificarse mediante cuentas de Windows, que a su vez puede autenticar el servidor. Desea utilizar el modelo de subsistema de confianza y autorizar a los clientes desde el servicio Web para, a continuacin, utilizar una identidad fija para obtener acceso a los recursos indirectos (bases de datos por ejemplo) a fin de admitir la agrupacin de conexiones.

Ms informacin
Si desea obtener ms informacin acerca de la autenticacin de Windows y la suplantacin, consulte el captulo 8 "Seguridad de ASP.NET". Para obtener ms informacin acerca de la autorizacin mediante direcciones URL, consulte "Notas acerca de la autorizacin mediante direcciones URL" en el captulo 8, "Seguridad de ASP.NET".

Autenticacin de Windows con identidad fija


El elemento <identity> del archivo Web.config es compatible con los atributos opcionales de nombre de usuario y contrasea, lo cual le permite configurar una identidad fija especfica para que la suplante el servicio Web. Este enfoque se muestra en el siguiente fragmento del archivo de configuracin.
<identity impersonate="true" userName="DomainName\UserName" password="ClearTextPassword" />

Escenarios de uso
No se recomienda el uso de este enfoque en entornos seguros por dos motivos: Los nombres de usuario y las contraseas no deberan almacenarse en formato de texto sin cifrar en los archivos de configuracin. En Windows 2000, este enfoque obliga a conceder a la cuenta de proceso ASP.NET el privilegio Actuar como parte del sistema operativo. De este modo se reduce la seguridad del servicio Web y aumenta el riesgo de

amenaza en caso de que un intruso pusiera en peligro el proceso del servicio Web (Aspnet_wp.exe).

Ms informacin
Si desea obtener ms informacin acerca de la autenticacin de Windows y la suplantacin, consulte el captulo 8 "Seguridad de ASP.NET". Para obtener ms informacin acerca de la autorizacin mediante direcciones URL, consulte "Notas acerca de la autorizacin mediante direcciones URL" en el captulo 8, "Seguridad de ASP.NET".

Configurar la seguridad
En esta seccin encontrar los pasos que debe realizar para configurar la seguridad de un servicio Web ASP.NET. Dichos mecanismos se reflejan en la Ilustracin 10.4.

{Insert figure: CH08 Configuring ASP.NET Security.gif}

Ilustracin 10.4
Configurar la seguridad de un servicio Web ASP.NET

Configurar los parmetros de IIS


Para obtener informacin pormenorizada acerca de cmo configurar los parmetros de seguridad de IIS, consulte el apartado "Configurar la seguridad" del captulo 8, "Seguridad de ASP.NET"; la informacin que encontrar es vlida tambin para los servicios Web ASP.NET.

Configurar los parmetros de ASP.NET


Los parmetros de configuracin de la aplicacin se almacenan en archivos Web.config, ubicados en el directorio raz virtual del servicio Web. Es preciso configurar los siguientes parmetros: 1. Configure la autenticacin. Debe establecerse para cada servicio Web (no en el archivo Machine.config) del archivo Web.config ubicado en el directorio raz virtual del servicio Web.
<authentication mode="Windows|None" />

Nota: los servicios Web no son compatibles actualmente con la autenticacin mediante Formularios y la autenticacin de Passport. Si decide utilizar la autenticacin personalizada o de mensajes, establezca el modo en ninguna. 2. Configure la suplantacin y la autorizacin. Si desea obtener informacin detallada, consulte "Configurar la seguridad" en el captulo 8, "Seguridad de ASP.NET."

Ms informacin
Para obtener ms informacin acerca de la autorizacin mediante direcciones URL, consulte "Notas acerca de la autorizacin mediante direcciones URL" en el captulo 8, "Seguridad de ASP.NET".

Proteger recursos
Debera utilizar las mismas tcnicas que se describen en el captulo 8, "Seguridad de ASP.NET", para proteger los recursos Web Adems, valore la posibilidad de eliminar los protocolos HTTP-GET y HTTP-POST del archivo Machine.config de los servidores de produccin cuando utilice los servicios Web.

Deshabilitar HTTP-GET y HTTP-POST


De forma predeterminada, los clientes se comunican con los servicios Web ASP.NET mediante tres protocolos: HTTP-GET, HTTP-POST y SOAP a travs de HTTP. Deshabilite la compatibilidad para los protocolos HTTP-GET y HTTP-POST en el nivel de equipo de los equipos de produccin en los que no sean necesarios. De esta forma conseguir evitar posibles problemas de seguridad que podran permitir que una pgina Web mal intencionada obtenga acceso a un servicio Web interno que se ejecute detrs de un servidor de seguridad. Nota: deshabilitar estos protocolos implica que los clientes nuevos no podrn comprobar un servicio Web XML mediante el botn Invocar de la pgina de prueba del servicio Web. En su lugar, deber crear un programa cliente de comprobacin. Para hacerlo, agregue una referencia al servicio Web mediante el sistema de desarrollo Microsoft Visual Studio .NET. Quizs desee mantener

habilitados estos protocolos en los equipos de desarrollo a fin de que los desarrolladores sean capaces de utilizar la pgina de comprobacin. Para deshabilitar los protocolos HTTP-GET y HTTP-POST en todo un equipo 1. Modifique el archivo Machine.config. 2. Elimine los comentarios de las lneas del elemento <webServices> que agregan compatibilidad para los protocolos HTTP-GET y HTTP-POST. Cuando haya acabado, el archivo Machine.config debera ofrecer el siguiente aspecto.
<webServices> <protocols> <add name="HttpSoap"/> <!-- <add name="HttpPost"/> --> <!-- <add name="HttpGet"/> <add name="Documentation"/> </protocols> </webServices> -->

3. Guarde el archivo Machine.config. Nota: en algunos casos especiales en los que clientes de servicios Web se comunican con un servicio Web que utiliza el protocolo HTTP-GET o HTTP-POST, es posible agregar la compatibilidad necesaria para dichos protocolos desde el archivo Web.config de la aplicacin, con slo crear un elemento <webServices> y agregar compatibilidad para los protocolos con los elementos <protocol> y <add>, tal como se ha mostrado anteriormente.

Ms informacin
Si desea obtener informacin detallada acerca de cmo proteger recursos, consulte "Proteger recursos" en el captulo 8, "Seguridad de ASP.NET".

Comunicacin segura
Utilice una combinacin de SSL e IPSec para proteger los vnculos de comunicacin.

Ms informacin
Para obtener informacin acerca de cmo llamar a un servicio Web mediante SSL, consulte "Cmo llamar a un servicio Web con SSL" en la seccin de referencia de este manual. Para obtener informacin acerca de cmo utilizar IPSec entre dos equipos, consulte "Cmo utilizar IPSec para garantizar una comunicacin segura entre dos servidores" en la seccin de referencia de este manual.

Transmitir credenciales para la autenticacin de servicios Web


Las llamadas a los servicios Web se efectan mediante un proxy de servicio Web, un objeto local que expone el mismo conjunto de mtodos que el servicio Web de destino.

Puede generar un proxy de servicio Web mediante la utilidad de la lnea de comandos Wsdl.exe. Si utiliza Visual Studio .NET tambin puede generar el proxy agregando una referencia Web al proyecto. Nota: si el servicio Web para el que desea generar un proxy est configurado para requerir certificados de cliente, deber deshabilitar temporalmente dicho requisito mientras agrega la referencia; de lo contrario se producir un error. Una vez agregada la referencia, no olvide volver a configurar el servicio para que exija los certificados. Un enfoque alternativo consiste en mantener fuera de lnea un archivo WSDL (Lenguaje de descripcin de servicios Web) de los servicios Web para que est disponible para las aplicaciones de consumidor. Es importante que recuerde actualizarlo si se modifica la interfaz del Servicio Web.

Especificar las credenciales autenticacin de Windows

de

cliente

para

la

El uso de la autenticacin de Windows requiere especificar las credenciales que deben utilizarse para la autenticacin mediante la propiedad Credentials del proxy de servicio Web. Si no establece esta propiedad de forma expresa, se efectuar la llamada al servicio Web sin utilizar credenciales. Cuando se requiere la autenticacin de Windows, se generar un estado HTTP 401, de respuesta de acceso denegado.

Utilizar DefaultCredentials
Las credenciales de cliente no se transfieren de forma implcita. Es el consumidor del servicio Web quien debe establecer las credenciales y los detalles de la autenticacin en el proxy. Para transferir el contexto de seguridad del contexto de seguridad Windows del cliente (sea desde un testigo de subproceso suplantado sea desde un testigo de proceso) a un servicio Web, establezca la propiedad Credentials del proxy de servicio Web en CredentialCache.DefaultCredentials tal como se muestra a continuacin.
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Tenga en cuenta los siguientes aspectos antes de utilizar este enfoque: Este mtodo transfiere las credenciales del cliente nicamente cuando se utiliza la autenticacin NTLM, Kerberos o negociada. Si una aplicacin de cliente (por ejemplo, una aplicacin de formularios de Windows) llama al servicio Web, las credenciales se obtendrn de la sesin de inicio de sesin interactiva del usuario. Las aplicaciones de servidor, como las aplicaciones Web de ASP.NET, utilizan la identidad de proceso, salvo que se haya configurado la suplantacin, en cuyo caso se utiliza la identidad del llamador suplantado.

Utilizar credenciales especficas


Para utilizar un conjunto especfico de credenciales de autenticacin para llamar a un servicio Web, utilice el siguiente cdigo.
CredentialCache cache = new CredentialCache(); cache.Add( new Uri(proxy.Url), // Web service URL "Negotiate", proxy.Credentials = cache; // Kerberos or NTLM new NetworkCredential("username", "password", "domainname") );

En este ejemplo, el tipo de autenticacin negociada solicitada puede ser la autenticacin Kerberos o NTLM.

Solicitar siempre un tipo de autenticacin especfica


Es recomendable solicitar siempre un tipo de autenticacin especfico, tal como se muestra ms arriba. Evite el uso directo de la clase NetworkCredential, como se refleja en el siguiente fragmento de cdigo.
proxy.Credentials = new NetworkCredential("username", "password", "domainname");

Este mtodo debera evitarse en el cdigo de produccin porque se pierde el control del mecanismo de autenticacin que utiliza el servicio Web y, como consecuencia, se pierde tambin el control con relacin al uso de las credenciales. Por ejemplo, es probable que se produzca un desafo de autenticacin Kerberos o NTLM desde el servidor pero, en su lugar, recibir un desafo bsico. En este caso, el nombre de usuario y la contrasea proporcionados se enviarn al servidor en formato de texto no cifrado.

Establecer la propiedad PreAuthenticate


La propiedad PreAuthenticate del proxy puede establecerse como verdadera o falsa. Establzcala en verdadera (true) para proporcionar las credenciales de autenticacin especficas para generar un encabezado HTTP WWW-authenticate para transferir con la solicitud Web. Esta propiedad guarda la denegacin de acceso del servidor Web en la solicitud y lleva a cabo la autenticacin en la siguiente solicitud de reintento. Nota: la preautenticacin slo se aplica cuando el servicio Web se autentica correctamente la primera vez. La preautenticacin no tiene repercusin alguna en la primera solicitud Web.

private void ConfigureProxy( WebClientProtocol proxy, string domain, string username, string password ) { // To improve performance, force pre-authentication proxy.PreAuthenticate = true; // Set the credentials CredentialCache cache = new CredentialCache(); cache.Add( new Uri(proxy.Url), "Negotiate", new NetworkCredential(username, password, domain) ); proxy.Credentials = cache; proxy.ConnectionGroupName = username; }

Utilizar la propiedad ConnectionGroupName


Tenga en cuenta que el cdigo anterior establece la propiedad ConnectionGroupName del proxy de servicio Web. Este paso slo es necesario si el contexto de seguridad utilizado para la conexin con el servicio Web vara de una solicitud a la otra, tal como se describe a continuacin.

Si trabaja con una aplicacin Web de ASP.NET que se conecta a un servicio Web y transfiere el contexto de seguridad del llamador original (mediante DefaultCredentials o estableciendo las credenciales explcitas, como en el caso anterior), debera establecer la propiedad ConnectionGroupName del proxy de servicio Web de la aplicacin Web. Con ello se consigue evitar que un cliente autenticado nuevo vuelva a utilizar una conexin TCP autenticada antigua para el servicio Web asociado con unas credenciales de autenticacin de cliente anteriores. La reutilizacin de conexiones puede tener lugar tras un resultado HTTP KeepAlives y la persistencia de autenticacin que se habilita por motivos de rendimiento en IIS. Establezca la propiedad ConnectionGroupName en un identificador (como el nombre de usuario del llamador) que distinga un llamador del siguiente, tal como se muestra en el fragmento de cdigo anterior. Nota: si el contexto de seguridad del llamador original no se transfiere a travs de la aplicacin Web hasta el servicio Web sino que la aplicacin Web se conecta al servicio Web mediante una identidad fija (como la identidad de proceso ASP.NET de la aplicacin Web), no ser necesario que establezca la propiedad ConnectionGroupName. En este escenario, el contexto de seguridad de conexin permanece constante de un llamador al siguiente.

Llamar a los servicios Web desde clientes que no sean de Windows


Existen una serie de enfoques de autenticacin que funcionan con los escenarios que implican varios exploradores. Entre ellos figuran: Autenticacin mediante certificados. Mediante certificados X.509 para varias plataformas. Autenticacin bsica. Si desea obtener un ejemplo de cmo utilizar la autenticacin bsica con un almacn de datos personalizado (sin que sea necesario Active Directory), consulte http://www.rassoc.com/gregr/weblog/stories/2002/06/26/webServicesSecurityH ttpBasicAuthenticationWithoutActiveDirectory.html (en ingls). Enfoques para mensajes GXA. Utilice Web Services Development Toolkit para implementar soluciones GXA (WS-Security). Enfoques personalizados. Por ejemplo, para transferir las credenciales mediante encabezados SOAP.

Autenticacin de servidor proxy


La autenticacin de servidor proxy no se admite en el cuadro de dilogo Agregar referencia Web de Visual Studio .NET (aunque s que ser compatible en la siguiente versin de Visual Studio .NET). Como resultado puede producirse un estado de HTTP 407: "Autenticacin proxy obligatoria" cuando intente agregar una referencia Web. Nota: quizs no experimente este error si visualiza el archivo .asmx desde un explorador porque los exploradores envan las credenciales automticamente. Para solucionar este problema, utilice la utilidad de la lnea de comandos Wsdl.exe (en vez del dilogo Agregar referencia Web), como se muestra a continuacin.
wsdl.exe /proxy:http://<YourProxy> /pu:<YourName> /pp:<YourPassword>

/pd:<YourDomain> http://www.YouWebServer.com/YourWebService/YourService.asmx

Utilice el cdigo presentado a continuacin si necesita establecer mediante programacin la informacin de autenticacin del servidor proxy.
YourWebServiceProxy.Proxy.Credentials = CredentialsCache.DefaultCredentials;

Transferir el llamador original


En esta seccin se describe cmo transferir el contexto de seguridad del llamador original a travs de una aplicacin Web de ASP.NET hasta un servicio Web ubicado en un servidor de aplicaciones remoto. Quizs necesite recurrir a este procedimiento para que un servicio Web sea compatible con la autorizacin por usuario, o bien prximos subsistemas indirectos (como bases de datos en las que se desee autorizar a los llamadores originales con relacin a objetos de base de datos individuales). La ilustracin 10.5 refleja el contexto de seguridad del llamador original (Alice) y cmo se transfiere a travs del servidor Web de cliente que aloja una aplicacin Web de ASP.NET hasta el objeto remoto, alojado por ASP.NET en un servidor de aplicaciones remotas, y finalmente a travs de un servidor de bases de datos de servidor.

{Insert figure: CH10 Flowing original caller with Web Service.gif} Ilustracin 10.5
Transferir el contexto de seguridad del llamador original

Para transferir las credenciales a un servicio Web, el cliente del servicio Web (la aplicacin Web de ASP.NET en este escenario en concreto) debe configurar el proxy de servicio Web y establecer de forma expresa la propiedad Credentials del proxy, como se describe en el apartado "Transmitir credenciales para la autenticacin de servicios Web" que figura anteriormente en este captulo. Tiene a su disposicin dos mtodos para transferir el contexto del llamador. Transferir las credenciales predeterminadas y utilizar la autenticacin Kerberos (y la delegacin). Este enfoque requiere el uso de la suplantacin en la aplicacin Web de ASP.NET y la configuracin del proxy de objeto remoto con el elemento DefaultCredentials obtenido del contexto de seguridad del llamador suplantado. Transferir las credenciales explcitas y utilizar la autenticacin bsica o mediante Formularios. Este enfoque no requiere el uso de funciones de suplantacin en la aplicacin Web de ASP.NET. En cambio, es preciso configurar programticamente el proxy de servicio Web con credenciales explcitas obtenidas bien de variables de servidor (en el caso de la autenticacin bsica) bien de campos de formularios HTML (en el caso de la autenticacin mediante Formularios) disponibles para la aplicacin Web. Tanto para la autenticacin bsica como mediante Formularios, el nombre de usuario y la contrasea estn disponibles en formato de texto sin cifrar.

Credenciales predeterminadas con delegacin Kerberos


Para utilizar la delegacin Kerberos, todos los equipos (servidores y clientes) deben ejecutar Windows 2000 o versiones posteriores. Por otra parte, las cuentas de cliente que vayan a delegarse debern almacenarse en Active Directory y no marcarse nunca como Confidencial y no se puede delegar. Las tablas que figuran a continuacin muestran los pasos de configuracin que deben llevarse a cabo en el servidor Web, as como en el servidor de aplicaciones.

Configurar el servidor Web


Configurar IIS Paso
Deshabilitar el acceso annimo para el directorio raz virtual de la aplicacin Web Habilitar la autenticacin integrada de Windows para el directorio raz virtual de la aplicacin Web La autenticacin Kerberos se negociar teniendo en cuenta que tanto los clientes como el servidor ejecutan Windows 2000 o versiones posteriores. Nota: si ya utiliza Internet Explorer 6 en Windows 2000, el valor predeterminado es la autenticacin NTLM en vez de la autenticacin Kerberos que se precisa en este contexto. Para habilitar la delegacin Kerberos, consulte el artculo Q299838, "Unable to Negotiate Kerberos Authentication after upgrading to Internet Explorer 6" (en ingls) en la Knowledge Base de Microsoft.

Ms informacin

Configurar ASP.NET Paso


Configurar la aplicacin Web de ASP.NET para utilizar la autenticacin de Windows

Ms informacin
Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Windows" />

Configurar la aplicacin Web de ASP.NET para la suplantacin

Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <identity> como se indica a continuacin:
<identity impersonate="true" />

Configurar el proxy de servicio Web Paso Ms informacin


Establecer la propiedad de credenciales del proxy de servicio Web en DefaultCredentials. Consulte el apartado "Utilizar DefaultCredentials" que figura ms arriba en este captulo para obtener muestras de cdigo.

Configurar el servidor de aplicaciones remoto


Configurar IIS Paso Ms informacin

Deshabilitar el acceso annimo para el directorio raz virtual del servicio Web Habilitar la autenticacin integrada de Windows para el directorio raz virtual de la aplicacin Web

Configurar ASP.NET (host del servicio Web) Paso Ms informacin


Configurar ASP.NET para utilizar la autenticacin de Windows Modifique el archivo Web.config del directorio virtual del servicio Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Windows" />

Configurar ASP.NET para la suplantacin

Modifique el archivo Web.config del directorio virtual del servicio Web. Establezca el elemento <identity> como se indica a continuacin:
<identity impersonate="true" />

Nota: este paso slo es necesario si se desea transferir el contexto de seguridad del llamador original al siguiente nivel indirecto (una base de datos por ejemplo) a travs del servicio Web. Si est habilitada la suplantacin, el acceso a los recursos (tanto local como remoto) utilizar el contexto de seguridad del llamador original suplantado. Si sus necesidades se limitan a permitir comprobaciones de autorizacin por usuario en el servicio Web, no necesitar utilizar la suplantacin.

Ms informacin
Para obtener ms informacin acerca de cmo configurar la delegacin Kerberos, consulte "Cmo implementar la delegacin Kerberos para Windows 2000" en la seccin de referencia de este manual.

Credenciales explcitas con autenticacin bsica o mediante Formularios


Como alternativa a la delegacin Kerberos, puede utilizar la autenticacin bsica o mediante Formularios en la aplicacin Web para capturar las credenciales del cliente y utilizar a continuacin la autenticacin bsica (o integrada de Windows) para el servicio Web. Gracias a este enfoque, la aplicacin Web tiene a su disposicin las credenciales del cliente en formato de texto sin cifrar. stas se pueden transferir al servicio Web a travs del proxy de servicio Web. Para hacerlo, escriba el cdigo pertinente en la aplicacin Web que le permita recuperar las credenciales del cliente y configurar el proxy.

Autenticacin bsica
Gracias a la autenticacin bsica, las credenciales del llamador original estn disponibles para la aplicacin Web en formato de variables de servidor. El siguiente fragmento de cdigo muestra cmo recuperarlas y configurar el proxy de servicio Web.
// Retrieve client's credentials (available with Basic authentication) string pwd = Request.ServerVariables["AUTH_PASSWORD"]; string uid = Request.ServerVariables["AUTH_USER"]; // Associate the credentials with the Web service proxy // To improve performance, force preauthentication proxy.PreAuthenticate = true; // Set the credentials CredentialCache cache = new CredentialCache(); cache.Add( new Uri(proxy.Url), "Basic", new NetworkCredential(uid, pwd, domain) ); proxy.Credentials = cache;

Autenticacin mediante Formularios


La autenticacin mediante Formularios permite que las credenciales del llamador original estn disponibles para la aplicacin Web en formato de campos de formulario (en vez de en formato de variables de servidor). En estos casos, utilice el siguiente fragmento de cdigo.
// Retrieve client's credentials from the logon form string pwd = txtPassword.Text; string uid = txtUid.Text; // Associate the credentials with the Web service proxy // To improve performance, force preauthentication proxy.PreAuthenticate = true; // Set the credentials CredentialCache cache = new CredentialCache(); cache.Add( new Uri(proxy.Url), "Basic", new NetworkCredential(uid, pwd, domain) ); proxy.Credentials = cache;

Las tablas que figuran a continuacin muestran los pasos de configuracin que deben llevarse a cabo en el servidor Web, as como en el servidor de aplicaciones.

Configurar el servidor Web


Configurar IIS Paso
Para utilizar la autenticacin bsica, deshabilitar el acceso annimo para el directorio raz virtual de la aplicacin Web y seleccionar la autenticacin bsica

Ms informacin
Tanto la autenticacin bsica como la autenticacin mediante Formularios deberan utilizarse junto con SSL para proteger las credenciales en formato de texto sin cifrar que se envan a travs de la red. Si utiliza la autenticacin bsica, debera utilizar SSL para todas las pginas (no slo para la pgina de inicio de sesin inicial), puesto que las credenciales bsicas se transmiten con todas y cada una de las solicitudes.

- O bien Para utilizar la autenticacin mediante Formularios, habilitar el acceso annimo

Del mismo modo, debera utilizar SSL para todas las pginas si utiliza la autenticacin mediante Formularios a fin de proteger las credenciales de texto sin cifrar durante el inicio de sesin y de proteger tambin el vale de autenticacin que se transfiere en solicitudes posteriores.

Configurar ASP.NET Paso


Si se utiliza la autenticacin bsica, configurar la aplicacin Web de ASP.NET para utilizar la autenticacin de Windows - O bien Si se utiliza la autenticacin mediante Formularios, configurar la aplicacin Web de ASP.NET para utilizar la autenticacin mediante Formularios

Ms informacin
Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Windows" />

- O bien Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Forms" />

Deshabilitar la suplantacin de la aplicacin Web de ASP.NET

Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <identity> como se indica a continuacin:
<identity impersonate="false" />

Nota: este cdigo equivale a suprimir el elemento <identity>. No se requiere la suplantacin, dado que las credenciales del usuario se transferirn de forma expresa al servicio Web a travs del proxy.

Configurar el proxy de servicio Web Paso Ms informacin


Escribir cdigo para capturar y establecer explcitamente las credenciales del proxy de servicio Web Consulte los fragmentos de cdigo incluidos en las secciones de autenticacin bsica y mediante Formularios.

Configurar el servidor de aplicaciones


Configurar IIS

Paso
Deshabilitar el acceso annimo para el directorio raz virtual de la aplicacin Habilitar bsica la autenticacin

Ms informacin

Nota: la autenticacin bsica del servidor de aplicaciones (servicio Web) permite que el servicio Web transfiera el contexto de seguridad del llamador original a la base de datos (dado que el nombre de usuario y la contrasea del llamador estn disponibles en formato de texto sin cifrar y pueden utilizarse para responder a los desafos de autenticacin de red desde el servidor de bases de datos). Si no necesita transferir el contexto de seguridad del llamador original ms all del servicio Web, considere la posibilidad de configurar IIS en el servidor de aplicaciones para que utilice la autenticacin integrada de Windows, puesto que con ello se mejora la seguridad y las credenciales no se transmiten a travs de la red ni estn disponibles para el servicio Web.

Configurar ASP.NET (servicio Web) Paso Ms informacin


Configurar ASP.NET para utilizar la autenticacin de Windows Modifique el archivo Web.config del directorio virtual del servicio Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Windows" />

Configurar el servicio Web de ASP.NET para la suplantacin

Modifique el archivo Web.config del directorio virtual del servicio Web. Establezca el elemento <identity> como se indica a continuacin:
<identity impersonate="true" />

Nota: este paso slo es necesario si se desea transferir el contexto de seguridad del llamador original al siguiente nivel indirecto (una base de datos por ejemplo) a travs del servicio Web. Si est habilitada la suplantacin, el acceso a los recursos (tanto local como remoto) utilizar el contexto de seguridad del llamador original suplantado. Si sus necesidades se limitan a permitir comprobaciones de autorizacin por usuario en el servicio Web, no necesitar utilizar la suplantacin.

Subsistema de confianza
El modelo del subsistema de confianza constituye un enfoque alternativo (ms sencillo de implementar) para la transmisin del contexto de seguridad del llamador original. En este modelo existe un lmite de confianza entre el servicio Web y la aplicacin Web. El servicio Web confa en la aplicacin Web para que autentique y autorice correctamente a los llamadores, antes de que permitir que las solicitudes

lleguen al servicio Web. En el servicio Web no se lleva a cabo autenticacin alguna de los llamadores originales. El servicio Web autentica la identidad fija de confianza utilizada por la aplicacin Web para la comunicacin con el servicio Web. En la mayora de los casos, se trata de la identidad del proceso de trabajo de ASP.NET. El modelo de subsistema de confianza se refleja en la ilustracin 10.6.

{Insert figure: CH10 Trusted subsystem with Web service.gif} Ilustracin 10.6
El modelo de subsistema de confianza

Transmitir la identidad del llamador


Si utiliza el modelo de subsistema de confianza, quizs necesite transmitir la identidad del llamador original (el nombre, no el contexto de seguridad), por ejemplo, por motivos de auditora de la base de datos. Puede transferir la identidad desde la aplicacin mediante un mtodo. Por otra parte, puede utilizar los parmetros de procedimientos almacenados y los parmetros de consulta de confianza (como muestra el siguiente ejemplo) para recuperar datos especficos de usuario de la base de datos.
SELECT x,y,z FROM SomeTable WHERE UserName = "Alice"

Pasos de configuracin
Las tablas que figuran a continuacin muestran los pasos de configuracin que deben llevarse a cabo en el servidor Web, as como en el servidor de aplicaciones.

Configurar el servidor Web


Configurar IIS Paso
Configurar la autenticacin de IIS

Ms informacin
La aplicacin Web puede utilizar cualquier forma de autenticacin para autenticar a los llamadores originales.

Configurar ASP.NET Paso


Configurar la autenticacin y comprobar que la suplantacin est deshabilitada

Ms informacin
Modifique el archivo Web.config del directorio virtual de la aplicacin Web. Establezca el elemento <authentication> en Windows, Forms o Passport.
<authentication mode="Windows|Forms|Passport" />

Establezca el elemento <identity> como se indica a continuacin:

<identity impersonate="false" />

(O BIEN, elimine el elemento <identity>). Restablecer la contrasea de la cuenta de ASPNET utilizada para ejecutar ASP.NET O BIEN crear una cuenta de dominio con privilegios mnimos para ejecutar ASP.NET y especificar informacin detallada de la cuenta en el elemento <processModel> del archivo Web.config Si desea obtener ms informacin acerca de cmo obtener acceso a los recursos de red (incluidos los servicios Web) desde ASP.NET y acerca de cmo seleccionar y configurar una cuenta de proceso para ASP.NET, consulte las secciones "Obtener acceso a recursos de red" e "Identidad del proceso para ASP.NET" en el captulo 8, "Seguridad de ASP.NET".

Configurar el proxy de servicio Web Paso Ms informacin


Configurar el proxy de servicio Web para utilizar las credenciales predeterminadas para todas las llamadas al servicio Web Utilice la siguiente lnea de cdigo:
proxy.Credentials = DefaultCredentials;

Configurar el servidor de aplicaciones


Configurar IIS Paso
Deshabilitar el acceso annimo para el directorio raz virtual del servicio Web Habilitar la autenticacin de Windows integrada

Ms informacin

Configurar ASP.NET Paso


Configurar ASP.NET para utilizar la autenticacin de Windows

Ms informacin
Modifique el archivo Web.config del directorio virtual del servicio Web. Establezca el elemento <authentication> como se indica a continuacin:
<authentication mode="Windows" />

Deshabilitar la suplantacin

Modifique el archivo Web.config del directorio virtual de la aplicacin. Establezca el elemento <identity> como se indica a continuacin:
<identity impersonate="false" />

Obtener acceso a recursos del sistema


Para obtener informacin detallada sobre el acceso a los recursos del sistema (por ejemplo, al registro de sucesos y al registro) de los servicios Web de ASP.NET, consulte el apartado "Obtener acceso a recursos de sistema" del captulo 8, "Seguridad de ASP.NET". Los enfoques y las restricciones abordados en el captulo 8 tambin son vlidos para los servicios Web de ASP.NET.

Obtener acceso a recursos de red


Cuando obtenga acceso a recursos de red desde un servicio Web, debe tener en consideracin la identidad utilizada para responder a los desafos de autenticacin de la red desde el equipo remoto. Existen tres opciones: La identidad de proceso (determinada por la cuenta utilizada para ejecutar el proceso de trabajo de ASP.NET) Una identidad de servicio (por ejemplo, una creada llamando a la interfaz LogonUser) La identidad del llamador original (con el servicio Web configurado para la suplantacin) Para obtener informacin detallada acerca de los beneficios que reporta cada uno de estos enfoques, junto con informacin pormenorizada de configuracin, consulte el apartado "Obtener acceso a recursos de red" del captulo 8, "Seguridad de ASP.NET".

Obtener acceso a los objetos COM


La directiva AspCompat (utilizada por las aplicaciones Web cuando llaman a objetos COM de subprocesamiento controlado) no est disponible para los servicios Web. Esto significa que cuando se llama a objetos de modelo de subprocesamiento controlado desde servicios Web, se produce un intercambio de subproceso. El resultado es una ligera disminucin del rendimiento, y si el servicio Web aplica la suplantacin, el testigo de suplantacin se perder al llamar al componente COM. Como consecuencia suele generarse una excepcin de acceso denegado.

Ms informacin
Para obtener ms informacin acerca de las excepciones de acceso denegado cuando se llama a objetos COM de subprocesamiento controlado, consulte el artculo Q325791,"PRB: Access Denied Error Message Occurs When Impersonating in ASP.NET and Calling STA COM Components" (en ingls) en la Knowledge Base de Microsoft. Para obtener ms informacin acerca de cmo obtener acceso a los objetos COM y utilizar el atributo AspCompat, consulte el apartado "Obtener acceso a los objetos COM" del captulo 8, "Seguridad de ASP.NET". Para obtener ms informacin acerca de cmo llamar a objetos COM de subprocesamiento controlado desde los servicios Web, consulte el artculo Q303375, "INFO: XML Web Services and Apartment Objects" (en ingls), de la Knowledge Base de Microsoft.

Utilizar certificados de cliente con los servicios Web


En esta seccin se describen las tcnicas para utilizar los certificados de cliente X.509 para la autenticacin de servicios Web.

Puede utilizar la autenticacin mediante certificados de cliente desde un servicio Web para autenticar los siguientes elementos: Otros servicios Web Aplicaciones que se comunican directamente con el servicio Web (por ejemplo, aplicaciones basadas en servidores o aplicaciones de escritorio de cliente)

Autenticar clientes certificados

de

explorador

Web

mediante

Un servicio Web no puede utilizar certificados de cliente para autenticar a los llamadores si stos interactan con una aplicacin Web intermedia, puesto que no es posible reenviar el certificado del llamador original al servicio Web a travs de la aplicacin Web. Mientras que la aplicacin Web puede autenticar a sus propios clientes mediante certificados, dichos certificados no pueden utilizarse en el servicio Web para la autenticacin. El motivo por el que da errores este escenario servidor a servidor es que la aplicacin Web no tiene acceso al certificado del cliente (en especial a la clave privada) de su almacn de certificados. Este problema se muestra en la ilustracin 10.7.

{Insert figure: CH10 - Web service server-to-server certificate problem.gif} Ilustracin 10.7
Autenticacin mediante certificados de cliente del servicio Web

Utilizar el modelo de subsistema de confianza


La solucin a esta restriccin pasa por utilizar un modelo de subsistema de confianza que, adems, reporta compatibilidad para la autenticacin mediante certificados en el servicio Web. Con este enfoque, el servicio Web autentica la aplicacin Web mediante el certificado de la aplicacin Web (no con el certificado del llamador original). El servicio Web confa en la aplicacin Web para autenticar a sus usuarios y llevar a cabo la autorizacin necesaria que garantice que slo los llamadores autorizados sean capaces de obtener acceso a los datos y las funciones expuestos por el servicio Web. Este enfoque queda reflejado en la ilustracin 10.8.

{Insert figure: Subsystem.gif} Ilustracin 10.8

CH10

Web

Service

Certificate

Authentication

Trusted

El servicio Web autentica la aplicacin Web de confianza

Si la lgica de autorizacin del servicio Web requiere varias funciones, la aplicacin Web podr enviar certificados distintos segn la funcin a la que pertenezca el llamador. Por ejemplo, puede utilizarse un certificado para miembros de un grupo Administradores (con permisos para actualizar los datos de una base de datos servidor) y otro certificado para el resto de los usuarios (con autorizacin para operaciones de lectura exclusivamente). Nota: en escenarios como ste existe la posibilidad de utilizar un servidor de certificados local (al que slo pueden obtener acceso los dos servidores) para administrar todos los certificados de aplicacin Web. En este escenario: La aplicacin Web autentica a sus usuarios mediante certificados de cliente. La aplicacin Web acta como equipo selector y autoriza a sus usuarios, adems de controlar el acceso al servicio Web. La aplicacin Web llama al servicio Web y transmite un certificado distinto que representa a la aplicacin (o, quizs, un rango de certificados basados en la pertenencia a funciones del llamador). El servicio Web autentica la aplicacin Web y confa en la aplicacin para ejecutar la autorizacin de cliente necesaria. Se utiliza IPSec entre el servidor de aplicaciones Web y el servidor de servicios Web a fin de proporcionar un control de acceso adicional. IPSec evita los intentos de acceso no autorizado desde otros equipos. La autenticacin mediante certificados del servidor de servicios Web tambin evita el acceso no autorizado.

Implementacin de soluciones
Para utilizar la autenticacin de certificados en el servicio Web de un escenario como ste, utilice un proceso independiente para llamar al servicio Web y transmitir el certificado. No deben manipularse los certificados directamente desde la aplicacin

Web de ASP.NET porque dicha aplicacin no dispone de ningn perfil de usuario cargado ni de almacn de certificados asociado. El proceso independiente debe configurarse para que se ejecute con una cuenta dotada de un perfil de usuario asociado (y almacn de certificados). Existen dos opciones bsicamente: Utilizar una aplicacin de servidor de Servicios Empresariales Utilizar un servicio Windows La ilustracin 10.9 muestra este escenario con una aplicacin servidor de Servicios Empresariales.

{Insert figure: CH10 - Web Service Certificate Authentication.gif} Ilustracin 10.9


Autenticacin mediante certificados con servicios Web

A continuacin se resume la secuencia de eventos que recopila ilustracin 10.9. 1. La aplicacin Web autentica al llamador original mediante certificados de cliente. 2. La aplicacin Web es el equipo selector y, por lo tanto, responsable de autorizar el acceso a determinadas reas de funcionalidad (incluidas aqullas que suponen interaccin con el servicio Web). 3. La aplicacin Web llama a un componente revisado mediante la ejecucin de una aplicacin de Servicios Empresariales fuera de proceso. 4. La cuenta utilizada para ejecutar la aplicacin de Servicios Empresariales dispone de un perfil de usuario asociado. El componente obtiene acceso al certificado del cliente desde su almacn de certificados, que lo utiliza el servicio Web para autenticar la aplicacin Web. 5. El componente revisado llama al servicio Web y transmite el certificado del cliente en cada solicitud de mtodo. El servicio Web autentica la aplicacin Web mediante este certificado y confa en la aplicacin Web para que autorice correctamente a los llamadores originales.

Por qu utilizar un proceso adicional?


La necesidad de un proceso adicional (en vez de utilizar el proceso Web Aspnet_wp.exe para ponerse en contacto con el servicio Web) se debe a que se requiere un perfil de usuario (que contenga un almacn de certificados).

Una aplicacin Web que se ejecuta mediante la cuenta ASPNET no tiene acceso a ninguno de los certificados del servidor Web. El motivo radica en que los almacenes de certificados se conservan en los perfiles de usuario asociados a las cuentas de usuario interactivas. Los perfiles de usuario se crean exclusivamente para las cuentas interactivas cuando se inicia una sesin fsica con dichas cuentas. El objetivo de la cuenta ASPNET no consiste en actuar como una cuenta de usuario interactiva y se configura con el privilegio "Denegar inicio de sesin interactivo" a fin de mejorar la seguridad. Importante: no vuelva a configurar la cuenta ASPNET para eliminar este privilegio y convertirla en una cuenta de inicio de sesin interactivo. Utilice un proceso independiente con una cuenta de servicio configurada para obtener acceso a los certificados, como se ha descrito anteriormente en este captulo.

Ms informacin
Para obtener ms informacin acerca de cmo implementar este enfoque, consulte "Cmo llamar a un servicio Web mediante certificados de cliente de ASPNET" en la seccin de referencia de este manual. Para obtener ms informacin acerca de la configuracin de IPSec, consulte "Cmo utilizar IPSec para garantizar una comunicacin segura entre dos servidores" en la seccin de referencia de este manual.

Comunicacin segura
La comunicacin segura hace referencia a la proteccin de la integridad y la confidencialidad de los mensajes del servicio Web conforme se transmiten de aplicacin en aplicacin a travs de la red. Se han desarrollado dos enfoques para solucionar este problema: opciones para el transporte y opciones para los mensajes.

Opciones para el transporte


Las opciones para el transporte incluyen: SSL IPSec Estas opciones resultan apropiadas cuando se cumplen las siguientes condiciones: Se enva un mensaje directamente desde la aplicacin a un servicio Web sin que el mensaje se enrute a travs de ningn sistema intermedio. Es posible controlar la configuracin de los dos puntos finales implicados en la transferencia del mensaje.

Opciones para los mensajes


Los enfoques relativos a los mensajes permiten proteger la confidencialidad e integridad de los mensajes cuando pasan por un nmero arbitrario de sistemas intermedios. Existe la posibilidad de firmar los mensajes para dotarlos de integridad. En cuanto a la confidencialidad, puede elegir entre cifrar la totalidad del mensaje o nicamente una parte del mismo. Utilice un enfoque para mensajes cuando se cumplan las siguientes condiciones: Se enva un mensaje a un servicio Web y es probable que el mensaje se reenve a otros servicios Web o que se enrute a travs de sistemas intermedios. No se tiene control sobre la configuracin de los dos puntos finales; por ejemplo, porque se envan mensajes de una empresa a otra.

Ms informacin
Web Service Development Toolkit incluir funciones para el cifrado de mensajes compatibles con la especificacin de seguridad WS-Security. Si desea obtener ms informacin acerca de SSL e IPSec, consulte el captulo 4, "Comunicacin segura".

Resumen
Este captulo se centra en la seguridad de los servicios Web (punto a punto) relativa tanto a la plataforma como al transporte que pueden ofrecer los servicios subyacentes de ASP.NET, IIS y el sistema operativo. Mientras que la seguridad de la plataforma permite soluciones seguras para escenarios de intranet estrechamente vinculados, no resulta conveniente para escenarios heterogneos. Es por este motivo precisamente por el que se requiere la seguridad que ofrece la especificacin de seguridad WS-Security de la arquitectura GXA. Utilice Web Services Development Kit para crear soluciones de seguridad de mensajes para servicios Web. Para entornos de dominios Windows estrechamente vinculados: Si desea transmitir la identidad del llamador original desde una aplicacin Web de ASP.NET a un servicio Web remoto, la aplicacin Web de ASP.NET debera utilizar la autenticacin Kerberos (con cuentas configuradas para la delegacin), bsica o mediante Formularios. Si utiliza la autenticacin Kerberos, habilite la suplantacin con la aplicacin Web y configure la propiedad Credentials del proxy de servicio Web mediante DefaultCredentials. Si utiliza la autenticacin bsica o mediante Formularios, capture las credenciales del llamador y establezca la propiedad Credentials del proxy de servicio Web agregando un nuevo objeto CredentialCache. Para escenarios de servicio Web a servicio Web: Utilice la autenticacin bsica o Kerberos y establezca las credenciales en el proxy de cliente. Utilice una aplicacin de Servicios Empresariales o un servicio de Windows fuera de proceso para que manipule los certificados X.509 desde las aplicaciones Web. En la medida de lo posible, utilice las comprobaciones de autorizacin de sistema como, por ejemplo, la autorizacin mediante archivos y direcciones URL. Si utiliza la autorizacin granular (en el nivel de mtodo Web por ejemplo), utilice funciones .NET (tanto de forma declarativa como imperativa). Autorice a los usuarios que no sean de Windows mediante funciones .NET (basadas en un objeto GenericPrincipal que contenga funciones). Deshabilite los protocolos HTTP-GET y HTTP-POST en todos los servidores de producto. Utilice la seguridad de transporte si no le preocupa transferir los mensajes de forma segura a travs de sistemas intermedios. Utilice la seguridad de transporte si el rendimiento de SSL es adecuado. Utilice la especificacin de seguridad WS-Security y Web Services Development kit para desarrollar soluciones para mensajes.

S-ar putea să vă placă și