12.07.2015 Views

De la seguridad en Servicios Web para .Net - Willy .Net

De la seguridad en Servicios Web para .Net - Willy .Net

De la seguridad en Servicios Web para .Net - Willy .Net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>De</strong> <strong>la</strong> <strong>seguridad</strong> <strong>en</strong> <strong>Servicios</strong> <strong>Web</strong> <strong>para</strong> .<strong>Net</strong>Este escrito se c<strong>en</strong>tra <strong>en</strong> <strong>la</strong> <strong>seguridad</strong> de los servicios <strong>Web</strong> <strong>en</strong> el nivel de <strong>la</strong>p<strong>la</strong>taforma, mediante <strong>la</strong>s características subyac<strong>en</strong>tes de IIS y ASP.NET. Para <strong>la</strong><strong>seguridad</strong> de los m<strong>en</strong>sajes, Microsoft está desarrol<strong>la</strong>ndo el kit de desarrollo deservicios <strong>Web</strong>, que permite g<strong>en</strong>erar soluciones de <strong>seguridad</strong> conforme a <strong>la</strong>especificación WS-Security, que forma parte de <strong>la</strong> iniciativa Global XML Architecture(GXA).Cont<strong>en</strong>idoModelo de <strong>seguridad</strong> <strong>para</strong> los servicios <strong>Web</strong>Arquitectura de <strong>seguridad</strong> <strong>para</strong> p<strong>la</strong>taformas/transporteEstrategias de aut<strong>en</strong>ticación y autorizaciónConfigurar <strong>la</strong> <strong>seguridad</strong>Transmitir cred<strong>en</strong>ciales <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación de servicios <strong>Web</strong>Transferir el l<strong>la</strong>mador originalSubsistema de confianzaObt<strong>en</strong>er acceso a recursos del sistemaObt<strong>en</strong>er acceso a recursos de redObt<strong>en</strong>er acceso a los objetos COMUtilizar certificados de cli<strong>en</strong>te con los servicios <strong>Web</strong>Comunicación seguraResum<strong>en</strong>En este capítulo se describe cómo desarrol<strong>la</strong>r y aplicar <strong>la</strong>s técnicas de aut<strong>en</strong>ticación,autorización y comunicación seguras <strong>para</strong> proteger los servicios <strong>Web</strong> de ASP.NET ylos m<strong>en</strong>sajes de los servicios <strong>Web</strong>. También se describe <strong>la</strong> <strong>seguridad</strong> desde el puntode vista de los servicios <strong>Web</strong> y se explica cómo aut<strong>en</strong>ticar y autorizar los l<strong>la</strong>madores,además de cómo transferir el contexto de <strong>seguridad</strong> a través de los servicios <strong>Web</strong>.Encontrará también información, desde <strong>la</strong> perspectiva del cli<strong>en</strong>te, <strong>para</strong> l<strong>la</strong>mar a losservicios <strong>Web</strong> mediante cred<strong>en</strong>ciales y certificados <strong>para</strong> admitir <strong>la</strong> aut<strong>en</strong>ticación porparte del servidor.Modelo de <strong>seguridad</strong> <strong>para</strong> los servicios <strong>Web</strong>La <strong>seguridad</strong> de los servicios <strong>Web</strong> puede aplicarse <strong>en</strong> tres niveles distintos:Seguridad (de punto a punto) <strong>para</strong> p<strong>la</strong>taformas/transporteSeguridad (personalizada) <strong>para</strong> aplicaciones


Seguridad (de extremo a extremo) <strong>para</strong> m<strong>en</strong>sajeríaCada <strong>en</strong>foque ofrece una serie de b<strong>en</strong>eficios y desv<strong>en</strong>tajas, que se detal<strong>la</strong>n acontinuación. La elección del <strong>en</strong>foque dep<strong>en</strong>de <strong>en</strong> gran medida de <strong>la</strong>s característicasde <strong>la</strong> arquitectura y <strong>la</strong>s p<strong>la</strong>taformas que vayan a utilizarse <strong>para</strong> el intercambio de losm<strong>en</strong>sajes.Nota: t<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta que este capítulo se c<strong>en</strong>tra <strong>en</strong> <strong>la</strong> <strong>seguridad</strong> de p<strong>la</strong>taformasy aplicaciones. La <strong>seguridad</strong> de los m<strong>en</strong>sajes se efectúa mediante <strong>la</strong> iniciativa dearquitectura de servicios <strong>Web</strong> XML global (GXA) y, <strong>en</strong> especial, <strong>la</strong> especificaciónde <strong>seguridad</strong> WS-Security. Durante el período de escritura de este docum<strong>en</strong>to,Microsoft ha <strong>la</strong>nzado una versión de tecnología de prueba de <strong>Web</strong> Services<strong>De</strong>velopm<strong>en</strong>t Kit (WSDK). <strong>De</strong> este modo podrá desarrol<strong>la</strong>r soluciones de<strong>seguridad</strong> <strong>para</strong> m<strong>en</strong>sajería conformes a <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security. Si desea obt<strong>en</strong>er más información, consultehttp://msdn.microsoft.com/webservices/building/wsdk/ (<strong>en</strong> inglés).Seguridad (de punto a punto) <strong>para</strong>p<strong>la</strong>taformas/transportePuede utilizarse el canal de transporte <strong>en</strong>tre dos puntos finales (cli<strong>en</strong>te de servicios<strong>Web</strong> y servicios <strong>Web</strong>) <strong>para</strong> garantizar <strong>la</strong> <strong>seguridad</strong> de punto a punto. La ilustración10.1 refleja este esc<strong>en</strong>ario.{Insert figure: CH10 – <strong>Web</strong> Services Security – Transport Level.gif}Ilustración 10.1Seguridad <strong>para</strong> p<strong>la</strong>taformas/transporteCuando se utiliza <strong>la</strong> <strong>seguridad</strong> de p<strong>la</strong>taformas, que presupone un <strong>en</strong>torno de sistemaoperativo Microsoft® Windows® estrecham<strong>en</strong>te integrado, por ejemplo, <strong>en</strong> intranetscorporativas:El servidor <strong>Web</strong> (IIS) proporciona aut<strong>en</strong>ticación básica, implícita, integrada ymediante certificados.El Servicio <strong>Web</strong> de ASP.NET hereda algunas funciones de aut<strong>en</strong>ticación yautorización de ASP.NET.Puede utilizarse SSL y/o IPSec <strong>para</strong> aplicar capacidades de integridad yconfid<strong>en</strong>cialidad <strong>para</strong> los m<strong>en</strong>sajes.Esc<strong>en</strong>arios de usoEl modelo de <strong>seguridad</strong> <strong>para</strong> transporte es s<strong>en</strong>cillo, bi<strong>en</strong> diseñado y adecuado <strong>para</strong>una gran variedad de esc<strong>en</strong>arios (básicam<strong>en</strong>te <strong>para</strong> intranets), <strong>en</strong> los que los


mecanismos de transporte y <strong>la</strong> configuración del punto final pued<strong>en</strong> contro<strong>la</strong>rse deforma exhaustiva.Los principales aspectos que deb<strong>en</strong> t<strong>en</strong>erse <strong>en</strong> cu<strong>en</strong>ta con re<strong>la</strong>ción a <strong>la</strong> <strong>seguridad</strong>del transporte son los sigui<strong>en</strong>tes:La <strong>seguridad</strong> se integra estrecham<strong>en</strong>te con <strong>la</strong> p<strong>la</strong>taforma subyac<strong>en</strong>te, elmecanismo de transporte y el proveedor de servicios de <strong>seguridad</strong> (NTLM,Kerberos, etc.), de los que también dep<strong>en</strong>de.La <strong>seguridad</strong> se aplica de punto a punto, sin crear provisiones <strong>para</strong> saltosmúltiples ni <strong>en</strong>rutami<strong>en</strong>to a través de nodos de aplicación intermedios.Seguridad <strong>para</strong> aplicacionesCon este <strong>en</strong>foque, <strong>la</strong> aplicación se hace cargo de <strong>la</strong> <strong>seguridad</strong> y utiliza <strong>la</strong>s funcionesde <strong>seguridad</strong> personalizadas. Por ejemplo:Una aplicación puede utilizar un <strong>en</strong>cabezado SOAP personalizado <strong>para</strong>transferir <strong>la</strong>s cred<strong>en</strong>ciales de usuario y aut<strong>en</strong>ticar al usuario con cada solicitudde Servicio <strong>Web</strong>. Un <strong>en</strong>foque habitual consiste <strong>en</strong> transferir un vale (o nombrede usuario o lic<strong>en</strong>cia) con el <strong>en</strong>cabezado SOAP.La aplicación ti<strong>en</strong>e <strong>la</strong> flexibilidad de g<strong>en</strong>erar su propio objeto IPrincipal confunciones incluidas. Puede ser una c<strong>la</strong>se personalizada o <strong>la</strong> c<strong>la</strong>seG<strong>en</strong>ericPrincipal que se proporciona con .NET Framework.La aplicación cifra de forma selectiva lo que sea necesario, aunque requiereun almac<strong>en</strong>ami<strong>en</strong>to seguro de <strong>la</strong> c<strong>la</strong>ve y que los desarrol<strong>la</strong>dores t<strong>en</strong>ganconocimi<strong>en</strong>tos de <strong>la</strong>s API de criptografía pertin<strong>en</strong>tes.Una técnica alternativa consiste <strong>en</strong> utilizar SSL <strong>para</strong> ofrecer confid<strong>en</strong>cialidad eintegridad, además de combinar SSL con <strong>en</strong>cabezados SOAP personalizados<strong>para</strong> llevar a cabo <strong>la</strong> aut<strong>en</strong>ticación.Esc<strong>en</strong>arios de usoUtilice este <strong>en</strong>foque si:<strong>De</strong>sea aprovechar un esquema exist<strong>en</strong>te de base de datos de usuarios yfunciones que se utiliza con <strong>la</strong> aplicación actual.<strong>De</strong>sea cifrar partes de un m<strong>en</strong>saje <strong>en</strong> lugar de <strong>la</strong> cad<strong>en</strong>a de datos completa.Seguridad (de extremo a extremo) <strong>para</strong> m<strong>en</strong>sajeríaSe trata del <strong>en</strong>foque más flexible y eficaz y el que utiliza <strong>la</strong> iniciativa GXA, <strong>en</strong>especial <strong>para</strong> <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security. La <strong>seguridad</strong> de m<strong>en</strong>sajesqueda esbozada <strong>en</strong> <strong>la</strong> ilustración 10.2.{Insert figure: CH10 - <strong>Web</strong> Services Security Message Level.gif}


Ilustración 10.2Seguridad de m<strong>en</strong>sajesLas especificaciones de <strong>seguridad</strong> WS-Security describ<strong>en</strong> <strong>la</strong>s mejoras realizadas <strong>en</strong><strong>la</strong> m<strong>en</strong>sajería SOAP y que permit<strong>en</strong> disfrutar de integridad, confid<strong>en</strong>cialidad yaut<strong>en</strong>ticación <strong>para</strong> los m<strong>en</strong>sajes.La aut<strong>en</strong>ticación se obti<strong>en</strong>e mediante testigos de <strong>seguridad</strong>, que se transfier<strong>en</strong><strong>en</strong> <strong>en</strong>cabezados SOAP. La especificación de <strong>seguridad</strong> WS-Security norequiere ningún tipo de testigo específico. Los testigos de <strong>seguridad</strong> pued<strong>en</strong>incluir vales Kerberos, certificados X.509 o un testigo binario personalizado.La comunicación segura se obti<strong>en</strong>e mediante firmas digitales que garantizan <strong>la</strong>integridad de los m<strong>en</strong>sajes y el cifrado XML <strong>para</strong> <strong>la</strong> confid<strong>en</strong>cialidad de losm<strong>en</strong>sajes.Esc<strong>en</strong>arios de usoLa especificación de <strong>seguridad</strong> WS-Security puede utilizarse <strong>para</strong> crear un marco deintercambio de m<strong>en</strong>sajes seguros <strong>en</strong> un <strong>en</strong>torno de servicios <strong>Web</strong> heterogéneo.Resulta idónea <strong>para</strong> <strong>en</strong>tornos y esc<strong>en</strong>arios heterogéneos <strong>en</strong> los que no se det<strong>en</strong>ta elcontrol directo ni de <strong>la</strong> configuración de los puntos finales ni de los nodos deaplicación intermedios.Seguridad de m<strong>en</strong>sajes:Puede ser indep<strong>en</strong>di<strong>en</strong>te del transporte subyac<strong>en</strong>te.Permite una arquitectura de <strong>seguridad</strong> heterogénea.Proporciona <strong>seguridad</strong> de extremo a extremo y permite el <strong>en</strong>rutami<strong>en</strong>to dem<strong>en</strong>sajes a través de nodos de aplicación intermedios.Admite varias tecnologías de cifrado.Admite el método de no rechazo.<strong>Web</strong> Services <strong>De</strong>velopm<strong>en</strong>t Kit (WSDK)<strong>Web</strong> Services <strong>De</strong>velopm<strong>en</strong>t Kit ofrece <strong>la</strong>s API necesarias <strong>para</strong> administrar <strong>la</strong><strong>seguridad</strong>, además de otros servicios tales como refer<strong>en</strong>cias de <strong>en</strong>rutami<strong>en</strong>to y dem<strong>en</strong>sajes. Este kit cumple los estándares más reci<strong>en</strong>tes de los servicios <strong>Web</strong> como<strong>la</strong> especificación de <strong>seguridad</strong> WS-Security, lo cual permite <strong>la</strong> interoperabilidad conotros proveedores que aplican <strong>la</strong>s mismas especificaciones.Más informaciónPara obt<strong>en</strong>er <strong>la</strong>s últimas novedades acerca de <strong>Web</strong> Services <strong>De</strong>velopm<strong>en</strong>t Kity <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security, consulte <strong>la</strong> página del c<strong>en</strong>tro dedesarrol<strong>la</strong>dores XML de MSDN <strong>en</strong> http://msdn.microsoft.com/webservices/ (<strong>en</strong>inglés).Para obt<strong>en</strong>er más información acerca de <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security, consulte <strong>la</strong> página de índice de <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security <strong>en</strong> http://msdn.microsoft.com/webservices/default.asp?pull=/library/<strong>en</strong>us/dnglobspec/html/wssecurspecindex.asp(<strong>en</strong> inglés).Para obt<strong>en</strong>er más información acerca de <strong>la</strong> arquitectura GXA, consulte e<strong>la</strong>rtículo "Understanding GXA" (<strong>en</strong> inglés) de MSDN.Para obt<strong>en</strong>er acceso a <strong>la</strong>s discusiones del tema, consulte el grupo de noticiasde interoperabilidad GXA <strong>en</strong> MSDN.


Arquitectura de <strong>seguridad</strong> <strong>para</strong>p<strong>la</strong>taformas/transporteLa ilustración 10.3 muestra <strong>la</strong> arquitectura de <strong>seguridad</strong> de <strong>la</strong> p<strong>la</strong>taforma deservicios <strong>Web</strong> de ASP.NET.{Insert figure: CH10 - <strong>Web</strong> Services Security Architecture.gif}Ilustración 10.3Arquitectura de <strong>seguridad</strong> de servicios <strong>Web</strong>La ilustración 10.3 muestra los mecanismos de aut<strong>en</strong>ticación y autorización queincluy<strong>en</strong> los servicios <strong>Web</strong> de ASP.NET. Cuando un cli<strong>en</strong>te l<strong>la</strong>ma a un servicio <strong>Web</strong>,se des<strong>en</strong>cad<strong>en</strong>a <strong>la</strong> sigui<strong>en</strong>te secu<strong>en</strong>cia de ev<strong>en</strong>tos de aut<strong>en</strong>ticación y autorización:1. Se recibe <strong>la</strong> solicitud SOAP de <strong>la</strong> red. Dicha solicitud puede o no cont<strong>en</strong>ercred<strong>en</strong>ciales de aut<strong>en</strong>ticación, lo que dep<strong>en</strong>de del tipo de aut<strong>en</strong>ticación que seesté utilizando.2. Opcionalm<strong>en</strong>te, IIS aut<strong>en</strong>tica al l<strong>la</strong>mador mediante <strong>la</strong> aut<strong>en</strong>ticación básica,implícita, integrada (NTLM o Kerberos) o mediante certificados. En <strong>en</strong>tornosheterogéneos <strong>en</strong> los que no es posible aplicar <strong>la</strong> aut<strong>en</strong>ticación de IIS(Windows), IIS se configura <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación anónima. En este esc<strong>en</strong>ario,el cli<strong>en</strong>te puede aut<strong>en</strong>ticarse mediante atributos de los m<strong>en</strong>sajes tales comovales transferidos a través del <strong>en</strong>cabezado SOAP.3. IIS también puede configurarse <strong>para</strong> que acepte solicitudes únicam<strong>en</strong>te de losequipos cli<strong>en</strong>te con unas direcciones IP específicas.4. IIS transfiere el testigo de acceso a Windows del l<strong>la</strong>mador aut<strong>en</strong>ticado aASP.NET (que puede ser el testigo de acceso del usuario de Internet anónimosi se ha configurado el servicio <strong>Web</strong> <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación anónima).


5. ASP.NET aut<strong>en</strong>tica al l<strong>la</strong>mador. Cuando ASP.NET se configura <strong>para</strong> <strong>la</strong>aut<strong>en</strong>ticación de Windows, no se efectúa ningún otro tipo de aut<strong>en</strong>ticaciónadicional <strong>en</strong> esta etapa e IIS se limita a aut<strong>en</strong>ticar al l<strong>la</strong>mador.En caso de utilizare un método de aut<strong>en</strong>ticación distinto de Windows, el modode aut<strong>en</strong>ticación de ASP.NET se establece <strong>en</strong> ninguno a fin de permitir <strong>la</strong>aut<strong>en</strong>ticación personalizada.Nota: <strong>la</strong> aut<strong>en</strong>ticación mediante Formu<strong>la</strong>rios y <strong>la</strong> aut<strong>en</strong>ticación de Passport noson compatibles con los servicios <strong>Web</strong>.6. ASP.NET autoriza el acceso al servicio <strong>Web</strong> solicitado (archivo .asmx)mediante <strong>la</strong> autorización de direcciones URL y de archivos, que utilizan lospermisos NTFS asociados con el archivo .asmx <strong>para</strong> determinar si debeconcederse el acceso al l<strong>la</strong>mador aut<strong>en</strong>ticado.Nota: <strong>la</strong> autorización de archivos sólo es compatible <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación deWindows.A fin de disfrutar de una autorización de granu<strong>la</strong>ridad precisa, también pued<strong>en</strong>utilizarse <strong>la</strong>s funciones .NET (mediante dec<strong>la</strong>raciones o programación) <strong>para</strong>garantizar que el l<strong>la</strong>mador reciba autorización <strong>para</strong> obt<strong>en</strong>er acceso al recursosolicitado o <strong>para</strong> llevar a cabo <strong>la</strong> operación solicitada.7. El código del servicio <strong>Web</strong> obti<strong>en</strong>e acceso a los recursos locales o remotosmediante una id<strong>en</strong>tidad determinada. <strong>De</strong> forma predeterminada, los servicios<strong>Web</strong> de ASP.NET no llevan a cabo ninguna sup<strong>la</strong>ntación, por lo que es <strong>la</strong>cu<strong>en</strong>ta de proceso ASP.NET configurada <strong>la</strong> que proporciona <strong>la</strong> id<strong>en</strong>tidad.Otras opciones alternativas incluy<strong>en</strong> <strong>la</strong> id<strong>en</strong>tidad del l<strong>la</strong>mador original o unaid<strong>en</strong>tidad de servicio configurada.Equipos selectoresLos equipos selectores del servicio <strong>Web</strong> de ASP.NET son:IISSi se deshabilita <strong>la</strong> aut<strong>en</strong>ticación anónima de IIS, los servicios IIS sólopermitirán solicitudes de usuarios aut<strong>en</strong>ticados.Restricciones de dirección IPIIS puede configurarse <strong>para</strong> que acepte solicitudes únicam<strong>en</strong>te de equiposcon unas direcciones IP específicas.ASP.NETEl módulo HTTP de autorización de archivos (exclusivam<strong>en</strong>te <strong>para</strong> <strong>la</strong>aut<strong>en</strong>ticación de Windows)El módulo HTTP de autorización mediante direcciones URLPeticiones de permisos Principal y comprobaciones de funciones explícitasMás informaciónPara obt<strong>en</strong>er más información acerca de los equipos selectores, consulte"Equipos selectores" <strong>en</strong> el capítulo 8, "Seguridad de ASP.NET".Para obt<strong>en</strong>er más información acerca de cómo configurar <strong>la</strong> <strong>seguridad</strong>,consulte el apartado "Configurar <strong>la</strong> <strong>seguridad</strong>" que figura más ade<strong>la</strong>nte <strong>en</strong> estemismo capítulo.


Estrategias de aut<strong>en</strong>ticación y autorizaciónEn esta sección se expon<strong>en</strong> <strong>la</strong>s opciones de autorización (tanto configurables comoprogramáticas) disponibles <strong>para</strong> un conjunto de esquemas de aut<strong>en</strong>ticaciónutilizados de forma habitual.Los esquemas de aut<strong>en</strong>ticación que van a describirse se indican a continuación:Aut<strong>en</strong>ticación de Windows con sup<strong>la</strong>ntaciónAut<strong>en</strong>ticación de Windows sin sup<strong>la</strong>ntaciónAut<strong>en</strong>ticación de Windows con id<strong>en</strong>tidad fijaAut<strong>en</strong>ticación de Windows con sup<strong>la</strong>ntaciónLos sigui<strong>en</strong>tes elem<strong>en</strong>tos de configuración muestran cómo habilitar <strong>la</strong> aut<strong>en</strong>ticaciónde Windows (IIS) y <strong>la</strong> sup<strong>la</strong>ntación mediante dec<strong>la</strong>raciones <strong>en</strong> los archivos<strong>Web</strong>.config o Machine.config.Nota: es recom<strong>en</strong>dable configurar <strong>la</strong> aut<strong>en</strong>ticación <strong>en</strong> función de cada servicio<strong>Web</strong> <strong>en</strong> el archivo <strong>Web</strong>.config del servicio <strong>Web</strong> correspondi<strong>en</strong>te.Con esta configuración, el código del servicio <strong>Web</strong> sup<strong>la</strong>nta al l<strong>la</strong>mador aut<strong>en</strong>ticadopor IIS. Para sup<strong>la</strong>ntar al l<strong>la</strong>mador original es preciso desactivar el acceso anónimo<strong>en</strong> IIS. En caso de utilizar el acceso anónimo, el código del servicio <strong>Web</strong> sup<strong>la</strong>nta <strong>la</strong>cu<strong>en</strong>ta de usuario de Internet anónimo (que, de manera predeterminada, esIUSR_MACHINE).Seguridad configurableEl empleo de <strong>la</strong> aut<strong>en</strong>ticación de Windows junto con <strong>la</strong> funcionalidad de sup<strong>la</strong>ntaciónofrece <strong>la</strong>s sigui<strong>en</strong>tes opciones de autorización:Listas ACL de WindowsArchivo del servicio <strong>Web</strong> (.asmx). La autorización de archivos lleva acabo comprobaciones de acceso <strong>para</strong> los recursos ASP.NET solicitados(que incluye el archivo del servicio <strong>Web</strong> .asmx) mediante el contexto de<strong>seguridad</strong> del l<strong>la</strong>mador original. Es preciso que el l<strong>la</strong>mador original reciba,como mínimo, acceso de lectura al archivo .asmx.Recursos a los que obti<strong>en</strong>e acceso el servicio <strong>Web</strong>. Las listas ACL deWindows de los recursos a los que obti<strong>en</strong>e acceso el servicio <strong>Web</strong>(archivos, carpetas, c<strong>la</strong>ves de registro, objetos de servicio del directorioActive Directory®, etc.) deb<strong>en</strong> incluir una <strong>en</strong>trada de control de acceso(ACE) que conceda acceso de lectura al l<strong>la</strong>mador original (puesto que elsubproceso del servicio <strong>Web</strong> utilizado <strong>para</strong> el acceso a los recursosejecuta <strong>la</strong> sup<strong>la</strong>ntación del l<strong>la</strong>mador).Autorización mediante direcciones URL. Se configura <strong>en</strong> el archivoMachine.config o <strong>Web</strong>.config. Con <strong>la</strong> aut<strong>en</strong>ticación de Windows, los nombresde usuario adoptan <strong>la</strong> forma DomainName\UserName(NombreDominio\NombreUsuario) y <strong>la</strong>s funciones se asignan una a una a losgrupos de Windows.


Seguridad mediante programaciónLa <strong>seguridad</strong> mediante programación hace refer<strong>en</strong>cia a <strong>la</strong>s comprobaciones de<strong>seguridad</strong> ubicadas <strong>en</strong> el código del servicio <strong>Web</strong>. Las sigui<strong>en</strong>tes opciones de<strong>seguridad</strong> mediante programación están disponibles cuando se utilizan <strong>la</strong>aut<strong>en</strong>ticación de Windows y <strong>la</strong> sup<strong>la</strong>ntación.Peticiones de permisos PrincipalImperativas (<strong>en</strong> <strong>la</strong>s líneas del código de un método)PrincipalPermission permCheck = new PrincipalPermission(permCheck.<strong>De</strong>mand();null, @"DomainName\WindowsGroup");<strong>De</strong>c<strong>la</strong>rativas (estos atributos pued<strong>en</strong> figurar antes de los métodos o <strong>la</strong>sc<strong>la</strong>ses <strong>Web</strong>)// <strong>De</strong>mand that the caller is a member of a specific role (for Windows// auth<strong>en</strong>tication this is the same as a Windows group)[PrincipalPermission(SecurityAction.<strong>De</strong>mand,Role=@"DomainName\WindowsGroup)]// <strong>De</strong>mand that the caller is a specific user[PrincipalPermission(SecurityAction.<strong>De</strong>mand,Name=@"DomainName\UserName")]Comprobaciones de funciones explícitas. Puede realizar <strong>la</strong> comprobaciónde funciones mediante <strong>la</strong> interfaz IPrincipal.IPrincipal.IsInRole(@"DomainName\WindowsGroup");Esc<strong>en</strong>arios de usoUtilice <strong>la</strong> aut<strong>en</strong>ticación de Windows y <strong>la</strong> sup<strong>la</strong>ntación cuando se d<strong>en</strong> <strong>la</strong>s sigui<strong>en</strong>tescondiciones:Los cli<strong>en</strong>tes del servicio <strong>Web</strong> pued<strong>en</strong> id<strong>en</strong>tificarse mediante cu<strong>en</strong>tas deWindows, que a su vez puede aut<strong>en</strong>ticar el servidor.<strong>De</strong>be transferirse el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original al sigui<strong>en</strong>t<strong>en</strong>ivel a través del servicio <strong>Web</strong>. Por ejemplo, a un conjunto de compon<strong>en</strong>tesrevisados que utilizan funciones de <strong>Servicios</strong> Empresariales (COM+) o a unnivel de datos que precisa autorización de granu<strong>la</strong>ridad fina (por usuario).<strong>De</strong>be transferir el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original a los nivelesindirectos a fin de admitir <strong>la</strong> auditoría de nivel del sistema operativo.Importante: el uso de <strong>la</strong> sup<strong>la</strong>ntación reduce <strong>la</strong> esca<strong>la</strong>bilidad porque incide <strong>en</strong> <strong>la</strong>agrupación de conexiones de bases de datos. A modo de <strong>en</strong>foque alternativo, esrecom<strong>en</strong>dable p<strong>la</strong>ntearse <strong>la</strong> posibilidad de utilizar un modelo de subsistema deconfianza <strong>en</strong> el que el servicio <strong>Web</strong> autorice a los l<strong>la</strong>madores y, a continuación,utilice una id<strong>en</strong>tidad fija <strong>para</strong> obt<strong>en</strong>er el acceso a <strong>la</strong> base de datos. La id<strong>en</strong>tidad dell<strong>la</strong>mador se transfiere desde <strong>la</strong> aplicación; por ejemplo, mediante los parámetrosde procedimi<strong>en</strong>to almac<strong>en</strong>ados.


Más informaciónSi desea obt<strong>en</strong>er más información acerca de <strong>la</strong> aut<strong>en</strong>ticación de Windows y <strong>la</strong>sup<strong>la</strong>ntación, consulte el capítulo 8 "Seguridad de ASP.NET".Para obt<strong>en</strong>er más información acerca de <strong>la</strong> autorización mediante direccionesURL, consulte "Notas acerca de <strong>la</strong> autorización mediante direcciones URL" <strong>en</strong>el capítulo 8, "Seguridad de ASP.NET".Aut<strong>en</strong>ticación de Windows sin sup<strong>la</strong>ntaciónLos sigui<strong>en</strong>tes elem<strong>en</strong>tos de configuración muestran cómo habilitar <strong>la</strong> aut<strong>en</strong>ticaciónde Windows (IIS) sin sup<strong>la</strong>ntación de forma dec<strong>la</strong>rativa <strong>en</strong> el archivo <strong>Web</strong>.config.Seguridad configurableEl empleo de <strong>la</strong> aut<strong>en</strong>ticación de Windows sin <strong>la</strong> sup<strong>la</strong>ntación ofrece <strong>la</strong>s sigui<strong>en</strong>tesopciones de autorización:Listas ACL de WindowsArchivo del servicio <strong>Web</strong> (.asmx). La autorización de archivos lleva acabo comprobaciones de acceso <strong>para</strong> los recursos ASP.NET solicitados(que incluye el archivo del servicio <strong>Web</strong> .asmx) mediante el l<strong>la</strong>madororiginal. No se requiere <strong>la</strong> sup<strong>la</strong>ntación.Recursos a los que obti<strong>en</strong>e acceso <strong>la</strong> aplicación. Las listas ACL deWindows de los recursos a <strong>la</strong>s que obti<strong>en</strong>e acceso <strong>la</strong> aplicación (archivos,carpetas, c<strong>la</strong>ves de registro, objetos de Active Directory) deb<strong>en</strong> incluir una<strong>en</strong>trada ACE que conceda acceso de lectura a <strong>la</strong> id<strong>en</strong>tidad del proceso deASP.NET (<strong>la</strong> id<strong>en</strong>tidad predeterminada que utiliza el subproceso delservicio <strong>Web</strong> <strong>para</strong> obt<strong>en</strong>er acceso a los recursos).Autorización de URLSe configura <strong>en</strong> los archivos Machine.config y <strong>Web</strong>.config. Con <strong>la</strong>aut<strong>en</strong>ticación de Windows, los nombres de usuario adoptan <strong>la</strong> formaDomainName\UserName (NombreDominio\NombreUsuario) y <strong>la</strong>s funciones seasignan una a una a los grupos de Windows.Seguridad mediante programaciónLa <strong>seguridad</strong> mediante programación hace refer<strong>en</strong>cia a <strong>la</strong>s comprobaciones de<strong>seguridad</strong> ubicadas <strong>en</strong> el código del servicio <strong>Web</strong>. Las sigui<strong>en</strong>tes opciones de<strong>seguridad</strong> mediante programación están disponibles cuando se utiliza <strong>la</strong>aut<strong>en</strong>ticación de Windows sin sup<strong>la</strong>ntación.Peticiones de permisos PrincipalImperativasPrincipalPermission permCheck = new PrincipalPermission(null, @"DomainName\WindowsGroup");


permCheck.<strong>De</strong>mand();<strong>De</strong>c<strong>la</strong>rativas// <strong>De</strong>mand that the caller is a member of a specific role (for Windows// auth<strong>en</strong>tication this is the same as a Windows group)[PrincipalPermission(SecurityAction.<strong>De</strong>mand,Role=@"DomainName\WindowsGroup)]// <strong>De</strong>mand that the caller is a specific user[PrincipalPermission(SecurityAction.<strong>De</strong>mand,Name=@"DomainName\UserName")]Comprobaciones de funciones explícitas. Puede realizar <strong>la</strong> comprobaciónde funciones mediante <strong>la</strong> interfaz IPrincipal.IPrincipal.IsInRole(@"DomainName\WindowsGroup");Esc<strong>en</strong>arios de usoUtilice <strong>la</strong> aut<strong>en</strong>ticación de Windows sin sup<strong>la</strong>ntación cuando se d<strong>en</strong> <strong>la</strong>s sigui<strong>en</strong>tescondiciones:Los cli<strong>en</strong>tes del servicio <strong>Web</strong> pued<strong>en</strong> id<strong>en</strong>tificarse mediante cu<strong>en</strong>tas deWindows, que a su vez puede aut<strong>en</strong>ticar el servidor.<strong>De</strong>sea utilizar el modelo de subsistema de confianza y autorizar a los cli<strong>en</strong>tesdesde el servicio <strong>Web</strong> <strong>para</strong>, a continuación, utilizar una id<strong>en</strong>tidad fija <strong>para</strong>obt<strong>en</strong>er acceso a los recursos indirectos (bases de datos por ejemplo) a fin deadmitir <strong>la</strong> agrupación de conexiones.Más informaciónSi desea obt<strong>en</strong>er más información acerca de <strong>la</strong> aut<strong>en</strong>ticación de Windows y <strong>la</strong>sup<strong>la</strong>ntación, consulte el capítulo 8 "Seguridad de ASP.NET".Para obt<strong>en</strong>er más información acerca de <strong>la</strong> autorización mediante direccionesURL, consulte "Notas acerca de <strong>la</strong> autorización mediante direcciones URL" <strong>en</strong>el capítulo 8, "Seguridad de ASP.NET".Aut<strong>en</strong>ticación de Windows con id<strong>en</strong>tidad fijaEl elem<strong>en</strong>to del archivo <strong>Web</strong>.config es compatible con los atributosopcionales de nombre de usuario y contraseña, lo cual le permite configurar unaid<strong>en</strong>tidad fija específica <strong>para</strong> que <strong>la</strong> sup<strong>la</strong>nte el servicio <strong>Web</strong>. Este <strong>en</strong>foque semuestra <strong>en</strong> el sigui<strong>en</strong>te fragm<strong>en</strong>to del archivo de configuración.Esc<strong>en</strong>arios de usoNo se recomi<strong>en</strong>da el uso de este <strong>en</strong>foque <strong>en</strong> <strong>en</strong>tornos seguros por dos motivos:Los nombres de usuario y <strong>la</strong>s contraseñas no deberían almac<strong>en</strong>arse <strong>en</strong>formato de texto sin cifrar <strong>en</strong> los archivos de configuración.En Windows 2000, este <strong>en</strong>foque obliga a conceder a <strong>la</strong> cu<strong>en</strong>ta de procesoASP.NET el privilegio “Actuar como parte del sistema operativo”. <strong>De</strong> estemodo se reduce <strong>la</strong> <strong>seguridad</strong> del servicio <strong>Web</strong> y aum<strong>en</strong>ta el riesgo de


am<strong>en</strong>aza <strong>en</strong> caso de que un intruso pusiera <strong>en</strong> peligro el proceso del servicio<strong>Web</strong> (Aspnet_wp.exe).Más informaciónSi desea obt<strong>en</strong>er más información acerca de <strong>la</strong> aut<strong>en</strong>ticación de Windows y <strong>la</strong>sup<strong>la</strong>ntación, consulte el capítulo 8 "Seguridad de ASP.NET".Para obt<strong>en</strong>er más información acerca de <strong>la</strong> autorización mediante direccionesURL, consulte "Notas acerca de <strong>la</strong> autorización mediante direcciones URL" <strong>en</strong>el capítulo 8, "Seguridad de ASP.NET".Configurar <strong>la</strong> <strong>seguridad</strong>En esta sección <strong>en</strong>contrará los pasos que debe realizar <strong>para</strong> configurar <strong>la</strong> <strong>seguridad</strong>de un servicio <strong>Web</strong> ASP.NET. Dichos mecanismos se reflejan <strong>en</strong> <strong>la</strong> Ilustración 10.4.{Insert figure: CH08 – Configuring ASP.NET Security.gif}


Ilustración 10.4Configurar <strong>la</strong> <strong>seguridad</strong> de un servicio <strong>Web</strong> ASP.NETConfigurar los parámetros de IISPara obt<strong>en</strong>er información porm<strong>en</strong>orizada acerca de cómo configurar los parámetrosde <strong>seguridad</strong> de IIS, consulte el apartado "Configurar <strong>la</strong> <strong>seguridad</strong>" del capítulo 8,"Seguridad de ASP.NET"; <strong>la</strong> información que <strong>en</strong>contrará es válida también <strong>para</strong> losservicios <strong>Web</strong> ASP.NET.Configurar los parámetros de ASP.NETLos parámetros de configuración de <strong>la</strong> aplicación se almac<strong>en</strong>an <strong>en</strong> archivos<strong>Web</strong>.config, ubicados <strong>en</strong> el directorio raíz virtual del servicio <strong>Web</strong>. Es precisoconfigurar los sigui<strong>en</strong>tes parámetros:1. Configure <strong>la</strong> aut<strong>en</strong>ticación. <strong>De</strong>be establecerse <strong>para</strong> cada servicio <strong>Web</strong> (no<strong>en</strong> el archivo Machine.config) del archivo <strong>Web</strong>.config ubicado <strong>en</strong> el directorioraíz virtual del servicio <strong>Web</strong>.Nota: los servicios <strong>Web</strong> no son compatibles actualm<strong>en</strong>te con <strong>la</strong> aut<strong>en</strong>ticaciónmediante Formu<strong>la</strong>rios y <strong>la</strong> aut<strong>en</strong>ticación de Passport. Si decide utilizar <strong>la</strong>aut<strong>en</strong>ticación personalizada o de m<strong>en</strong>sajes, establezca el modo <strong>en</strong> ninguna.2. Configure <strong>la</strong> sup<strong>la</strong>ntación y <strong>la</strong> autorización. Si desea obt<strong>en</strong>er informacióndetal<strong>la</strong>da, consulte "Configurar <strong>la</strong> <strong>seguridad</strong>" <strong>en</strong> el capítulo 8, "Seguridad deASP.NET."Más informaciónPara obt<strong>en</strong>er más información acerca de <strong>la</strong> autorización mediante direcciones URL,consulte "Notas acerca de <strong>la</strong> autorización mediante direcciones URL" <strong>en</strong> el capítulo8, "Seguridad de ASP.NET".Proteger recursos<strong>De</strong>bería utilizar <strong>la</strong>s mismas técnicas que se describ<strong>en</strong> <strong>en</strong> el capítulo 8, "Seguridad deASP.NET", <strong>para</strong> proteger los recursos <strong>Web</strong> Además, valore <strong>la</strong> posibilidad de eliminarlos protocolos HTTP-GET y HTTP-POST del archivo Machine.config de losservidores de producción cuando utilice los servicios <strong>Web</strong>.<strong>De</strong>shabilitar HTTP-GET y HTTP-POST<strong>De</strong> forma predeterminada, los cli<strong>en</strong>tes se comunican con los servicios <strong>Web</strong> ASP.NETmediante tres protocolos: HTTP-GET, HTTP-POST y SOAP a través de HTTP.<strong>De</strong>shabilite <strong>la</strong> compatibilidad <strong>para</strong> los protocolos HTTP-GET y HTTP-POST <strong>en</strong> elnivel de equipo de los equipos de producción <strong>en</strong> los que no sean necesarios. <strong>De</strong> estaforma conseguirá evitar posibles problemas de <strong>seguridad</strong> que podrían permitir queuna página <strong>Web</strong> mal int<strong>en</strong>cionada obt<strong>en</strong>ga acceso a un servicio <strong>Web</strong> interno que seejecute detrás de un servidor de <strong>seguridad</strong>.Nota: deshabilitar estos protocolos implica que los cli<strong>en</strong>tes nuevos no podráncomprobar un servicio <strong>Web</strong> XML mediante el botón Invocar de <strong>la</strong> página deprueba del servicio <strong>Web</strong>. En su lugar, deberá crear un programa cli<strong>en</strong>te decomprobación. Para hacerlo, agregue una refer<strong>en</strong>cia al servicio <strong>Web</strong> mediante elsistema de desarrollo Microsoft Visual Studio® .NET. Quizás desee mant<strong>en</strong>er


habilitados estos protocolos <strong>en</strong> los equipos de desarrollo a fin de que losdesarrol<strong>la</strong>dores sean capaces de utilizar <strong>la</strong> página de comprobación. Para deshabilitar los protocolos HTTP-GET y HTTP-POST <strong>en</strong> todo unequipo1. Modifique el archivo Machine.config.2. Elimine los com<strong>en</strong>tarios de <strong>la</strong>s líneas del elem<strong>en</strong>to queagregan compatibilidad <strong>para</strong> los protocolos HTTP-GET y HTTP-POST. Cuandohaya acabado, el archivo Machine.config debería ofrecer el sigui<strong>en</strong>te aspecto.3. Guarde el archivo Machine.config.Nota: <strong>en</strong> algunos casos especiales <strong>en</strong> los que cli<strong>en</strong>tes de servicios <strong>Web</strong> secomunican con un servicio <strong>Web</strong> que utiliza el protocolo HTTP-GET o HTTP-POST,es posible agregar <strong>la</strong> compatibilidad necesaria <strong>para</strong> dichos protocolos desde e<strong>la</strong>rchivo <strong>Web</strong>.config de <strong>la</strong> aplicación, con sólo crear un elem<strong>en</strong>to yagregar compatibilidad <strong>para</strong> los protocolos con los elem<strong>en</strong>tos y ,tal como se ha mostrado anteriorm<strong>en</strong>te.Más informaciónSi desea obt<strong>en</strong>er información detal<strong>la</strong>da acerca de cómo proteger recursos, consulte"Proteger recursos" <strong>en</strong> el capítulo 8, "Seguridad de ASP.NET".Comunicación seguraUtilice una combinación de SSL e IPSec <strong>para</strong> proteger los vínculos de comunicación.Más informaciónPara obt<strong>en</strong>er información acerca de cómo l<strong>la</strong>mar a un servicio <strong>Web</strong> medianteSSL, consulte "Cómo l<strong>la</strong>mar a un servicio <strong>Web</strong> con SSL" <strong>en</strong> <strong>la</strong> sección derefer<strong>en</strong>cia de este manual.Para obt<strong>en</strong>er información acerca de cómo utilizar IPSec <strong>en</strong>tre dos equipos,consulte "Cómo utilizar IPSec <strong>para</strong> garantizar una comunicación segura <strong>en</strong>tredos servidores" <strong>en</strong> <strong>la</strong> sección de refer<strong>en</strong>cia de este manual.Transmitir cred<strong>en</strong>ciales <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación deservicios <strong>Web</strong>Las l<strong>la</strong>madas a los servicios <strong>Web</strong> se efectúan mediante un proxy de servicio <strong>Web</strong>, unobjeto local que expone el mismo conjunto de métodos que el servicio <strong>Web</strong> dedestino.


Puede g<strong>en</strong>erar un proxy de servicio <strong>Web</strong> mediante <strong>la</strong> utilidad de <strong>la</strong> línea decomandos Wsdl.exe. Si utiliza Visual Studio .NET también puede g<strong>en</strong>erar el proxyagregando una refer<strong>en</strong>cia <strong>Web</strong> al proyecto.Nota: si el servicio <strong>Web</strong> <strong>para</strong> el que desea g<strong>en</strong>erar un proxy está configurado <strong>para</strong>requerir certificados de cli<strong>en</strong>te, deberá deshabilitar temporalm<strong>en</strong>te dicho requisitomi<strong>en</strong>tras agrega <strong>la</strong> refer<strong>en</strong>cia; de lo contrario se producirá un error. Una vezagregada <strong>la</strong> refer<strong>en</strong>cia, no olvide volver a configurar el servicio <strong>para</strong> que exija loscertificados.Un <strong>en</strong>foque alternativo consiste <strong>en</strong> mant<strong>en</strong>er fuera de línea un archivo WSDL(L<strong>en</strong>guaje de descripción de servicios <strong>Web</strong>) de los servicios <strong>Web</strong> <strong>para</strong> que estédisponible <strong>para</strong> <strong>la</strong>s aplicaciones de consumidor. Es importante que recuerdeactualizarlo si se modifica <strong>la</strong> interfaz del Servicio <strong>Web</strong>.Especificar <strong>la</strong>s cred<strong>en</strong>ciales de cli<strong>en</strong>te <strong>para</strong> <strong>la</strong>aut<strong>en</strong>ticación de WindowsEl uso de <strong>la</strong> aut<strong>en</strong>ticación de Windows requiere especificar <strong>la</strong>s cred<strong>en</strong>ciales quedeb<strong>en</strong> utilizarse <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación mediante <strong>la</strong> propiedad Cred<strong>en</strong>tials del proxyde servicio <strong>Web</strong>. Si no establece esta propiedad de forma expresa, se efectuará <strong>la</strong>l<strong>la</strong>mada al servicio <strong>Web</strong> sin utilizar cred<strong>en</strong>ciales. Cuando se requiere <strong>la</strong> aut<strong>en</strong>ticaciónde Windows, se g<strong>en</strong>erará un estado HTTP 401, de respuesta de acceso d<strong>en</strong>egado.Utilizar <strong>De</strong>faultCred<strong>en</strong>tialsLas cred<strong>en</strong>ciales de cli<strong>en</strong>te no se transfier<strong>en</strong> de forma implícita. Es el consumidor delservicio <strong>Web</strong> qui<strong>en</strong> debe establecer <strong>la</strong>s cred<strong>en</strong>ciales y los detalles de <strong>la</strong>aut<strong>en</strong>ticación <strong>en</strong> el proxy. Para transferir el contexto de <strong>seguridad</strong> del contexto de<strong>seguridad</strong> Windows del cli<strong>en</strong>te (sea desde un testigo de subproceso sup<strong>la</strong>ntado seadesde un testigo de proceso) a un servicio <strong>Web</strong>, establezca <strong>la</strong> propiedadCred<strong>en</strong>tials del proxy de servicio <strong>Web</strong> <strong>en</strong> Cred<strong>en</strong>tialCache.<strong>De</strong>faultCred<strong>en</strong>tials talcomo se muestra a continuación.proxy.Cred<strong>en</strong>tials = System.<strong>Net</strong>.Cred<strong>en</strong>tialCache.<strong>De</strong>faultCred<strong>en</strong>tials;T<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta los sigui<strong>en</strong>tes aspectos antes de utilizar este <strong>en</strong>foque:Este método transfiere <strong>la</strong>s cred<strong>en</strong>ciales del cli<strong>en</strong>te únicam<strong>en</strong>te cuando seutiliza <strong>la</strong> aut<strong>en</strong>ticación NTLM, Kerberos o negociada.Si una aplicación de cli<strong>en</strong>te (por ejemplo, una aplicación de formu<strong>la</strong>rios deWindows) l<strong>la</strong>ma al servicio <strong>Web</strong>, <strong>la</strong>s cred<strong>en</strong>ciales se obt<strong>en</strong>drán de <strong>la</strong> sesión deinicio de sesión interactiva del usuario.Las aplicaciones de servidor, como <strong>la</strong>s aplicaciones <strong>Web</strong> de ASP.NET, utilizan<strong>la</strong> id<strong>en</strong>tidad de proceso, salvo que se haya configurado <strong>la</strong> sup<strong>la</strong>ntación, <strong>en</strong>cuyo caso se utiliza <strong>la</strong> id<strong>en</strong>tidad del l<strong>la</strong>mador sup<strong>la</strong>ntado.Utilizar cred<strong>en</strong>ciales específicasPara utilizar un conjunto específico de cred<strong>en</strong>ciales de aut<strong>en</strong>ticación <strong>para</strong> l<strong>la</strong>mar a unservicio <strong>Web</strong>, utilice el sigui<strong>en</strong>te código.Cred<strong>en</strong>tialCache cache = new Cred<strong>en</strong>tialCache();cache.Add( new Uri(proxy.Url), // <strong>Web</strong> service URL"Negotiate", // Kerberos or NTLMnew <strong>Net</strong>workCred<strong>en</strong>tial("username", "password", "domainname") );proxy.Cred<strong>en</strong>tials = cache;


En este ejemplo, el tipo de aut<strong>en</strong>ticación negociada solicitada puede ser <strong>la</strong>aut<strong>en</strong>ticación Kerberos o NTLM.Solicitar siempre un tipo de aut<strong>en</strong>ticación específicaEs recom<strong>en</strong>dable solicitar siempre un tipo de aut<strong>en</strong>ticación específico, tal como semuestra más arriba. Evite el uso directo de <strong>la</strong> c<strong>la</strong>se <strong>Net</strong>workCred<strong>en</strong>tial, como serefleja <strong>en</strong> el sigui<strong>en</strong>te fragm<strong>en</strong>to de código.proxy.Cred<strong>en</strong>tials = new<strong>Net</strong>workCred<strong>en</strong>tial("username", "password", "domainname");Este método debería evitarse <strong>en</strong> el código de producción porque se pierde el controldel mecanismo de aut<strong>en</strong>ticación que utiliza el servicio <strong>Web</strong> y, como consecu<strong>en</strong>cia, sepierde también el control con re<strong>la</strong>ción al uso de <strong>la</strong>s cred<strong>en</strong>ciales.Por ejemplo, es probable que se produzca un desafío de aut<strong>en</strong>ticación Kerberos oNTLM desde el servidor pero, <strong>en</strong> su lugar, recibirá un desafío básico. En este caso,el nombre de usuario y <strong>la</strong> contraseña proporcionados se <strong>en</strong>viarán al servidor <strong>en</strong>formato de texto no cifrado.Establecer <strong>la</strong> propiedad PreAuth<strong>en</strong>ticateLa propiedad PreAuth<strong>en</strong>ticate del proxy puede establecerse como verdadera ofalsa. Establézca<strong>la</strong> <strong>en</strong> verdadera (true) <strong>para</strong> proporcionar <strong>la</strong>s cred<strong>en</strong>ciales deaut<strong>en</strong>ticación específicas <strong>para</strong> g<strong>en</strong>erar un <strong>en</strong>cabezado HTTP WWW-auth<strong>en</strong>ticate<strong>para</strong> transferir con <strong>la</strong> solicitud <strong>Web</strong>. Esta propiedad guarda <strong>la</strong> d<strong>en</strong>egación de accesodel servidor <strong>Web</strong> <strong>en</strong> <strong>la</strong> solicitud y lleva a cabo <strong>la</strong> aut<strong>en</strong>ticación <strong>en</strong> <strong>la</strong> sigui<strong>en</strong>tesolicitud de reint<strong>en</strong>to.Nota: <strong>la</strong> preaut<strong>en</strong>ticación sólo se aplica cuando el servicio <strong>Web</strong> se aut<strong>en</strong>ticacorrectam<strong>en</strong>te <strong>la</strong> primera vez. La preaut<strong>en</strong>ticación no ti<strong>en</strong>e repercusión alguna <strong>en</strong><strong>la</strong> primera solicitud <strong>Web</strong>.private void ConfigureProxy( <strong>Web</strong>Cli<strong>en</strong>tProtocol proxy,string domain, string username,string password ){// To improve performance, force pre-auth<strong>en</strong>ticationproxy.PreAuth<strong>en</strong>ticate = true;// Set the cred<strong>en</strong>tialsCred<strong>en</strong>tialCache cache = new Cred<strong>en</strong>tialCache();cache.Add( new Uri(proxy.Url),"Negotiate",new <strong>Net</strong>workCred<strong>en</strong>tial(username, password, domain) );proxy.Cred<strong>en</strong>tials = cache;proxy.ConnectionGroupName = username;}Utilizar <strong>la</strong> propiedad ConnectionGroupNameT<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta que el código anterior establece <strong>la</strong> propiedadConnectionGroupName del proxy de servicio <strong>Web</strong>. Este paso sólo es necesario siel contexto de <strong>seguridad</strong> utilizado <strong>para</strong> <strong>la</strong> conexión con el servicio <strong>Web</strong> varía de unasolicitud a <strong>la</strong> otra, tal como se describe a continuación.


Si trabaja con una aplicación <strong>Web</strong> de ASP.NET que se conecta a un servicio <strong>Web</strong> ytransfiere el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original (mediante<strong>De</strong>faultCred<strong>en</strong>tials o estableci<strong>en</strong>do <strong>la</strong>s cred<strong>en</strong>ciales explícitas, como <strong>en</strong> el casoanterior), debería establecer <strong>la</strong> propiedad ConnectionGroupName del proxy deservicio <strong>Web</strong> de <strong>la</strong> aplicación <strong>Web</strong>. Con ello se consigue evitar que un cli<strong>en</strong>teaut<strong>en</strong>ticado nuevo vuelva a utilizar una conexión TCP aut<strong>en</strong>ticada antigua <strong>para</strong> elservicio <strong>Web</strong> asociado con unas cred<strong>en</strong>ciales de aut<strong>en</strong>ticación de cli<strong>en</strong>te anteriores.La reutilización de conexiones puede t<strong>en</strong>er lugar tras un resultado HTTP KeepAlivesy <strong>la</strong> persist<strong>en</strong>cia de aut<strong>en</strong>ticación que se habilita por motivos de r<strong>en</strong>dimi<strong>en</strong>to <strong>en</strong> IIS.Establezca <strong>la</strong> propiedad ConnectionGroupName <strong>en</strong> un id<strong>en</strong>tificador (como elnombre de usuario del l<strong>la</strong>mador) que distinga un l<strong>la</strong>mador del sigui<strong>en</strong>te, tal como semuestra <strong>en</strong> el fragm<strong>en</strong>to de código anterior.Nota: si el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original no se transfiere a través de<strong>la</strong> aplicación <strong>Web</strong> hasta el servicio <strong>Web</strong> sino que <strong>la</strong> aplicación <strong>Web</strong> se conecta alservicio <strong>Web</strong> mediante una id<strong>en</strong>tidad fija (como <strong>la</strong> id<strong>en</strong>tidad de proceso ASP.NETde <strong>la</strong> aplicación <strong>Web</strong>), no será necesario que establezca <strong>la</strong> propiedadConnectionGroupName. En este esc<strong>en</strong>ario, el contexto de <strong>seguridad</strong> de conexiónpermanece constante de un l<strong>la</strong>mador al sigui<strong>en</strong>te.L<strong>la</strong>mar a los servicios <strong>Web</strong> desde cli<strong>en</strong>tes que no seande WindowsExist<strong>en</strong> una serie de <strong>en</strong>foques de aut<strong>en</strong>ticación que funcionan con los esc<strong>en</strong>ariosque implican varios exploradores. Entre ellos figuran:Aut<strong>en</strong>ticación mediante certificados. Mediante certificados X.509 <strong>para</strong>varias p<strong>la</strong>taformas.Aut<strong>en</strong>ticación básica. Si desea obt<strong>en</strong>er un ejemplo de cómo utilizar <strong>la</strong>aut<strong>en</strong>ticación básica con un almacén de datos personalizado (sin que seanecesario Active Directory), consultehttp://www.rassoc.com/gregr/weblog/stories/2002/06/26/webServicesSecurityHttpBasicAuth<strong>en</strong>ticationWithoutActiveDirectory.html (<strong>en</strong> inglés).Enfoques <strong>para</strong> m<strong>en</strong>sajes GXA. Utilice <strong>Web</strong> Services <strong>De</strong>velopm<strong>en</strong>t Toolkit<strong>para</strong> implem<strong>en</strong>tar soluciones GXA (WS-Security).Enfoques personalizados. Por ejemplo, <strong>para</strong> transferir <strong>la</strong>s cred<strong>en</strong>cialesmediante <strong>en</strong>cabezados SOAP.Aut<strong>en</strong>ticación de servidor proxyLa aut<strong>en</strong>ticación de servidor proxy no se admite <strong>en</strong> el cuadro de diálogo Agregarrefer<strong>en</strong>cia <strong>Web</strong> de Visual Studio .NET (aunque sí que será compatible <strong>en</strong> <strong>la</strong>sigui<strong>en</strong>te versión de Visual Studio .NET). Como resultado puede producirse unestado de HTTP 407: "Aut<strong>en</strong>ticación proxy obligatoria" cuando int<strong>en</strong>te agregar unarefer<strong>en</strong>cia <strong>Web</strong>.Nota: quizás no experim<strong>en</strong>te este error si visualiza el archivo .asmx desde unexplorador porque los exploradores <strong>en</strong>vían <strong>la</strong>s cred<strong>en</strong>ciales automáticam<strong>en</strong>te.Para solucionar este problema, utilice <strong>la</strong> utilidad de <strong>la</strong> línea de comandos Wsdl.exe(<strong>en</strong> vez del diálogo Agregar refer<strong>en</strong>cia <strong>Web</strong>), como se muestra a continuación.wsdl.exe /proxy:http:// /pu: /pp:/pd: http://www.You<strong>Web</strong>Server.com/Your<strong>Web</strong>Service/YourService.asmx


Utilice el código pres<strong>en</strong>tado a continuación si necesita establecer medianteprogramación <strong>la</strong> información de aut<strong>en</strong>ticación del servidor proxy.Your<strong>Web</strong>ServiceProxy.Proxy.Cred<strong>en</strong>tials = Cred<strong>en</strong>tialsCache.<strong>De</strong>faultCred<strong>en</strong>tials;Transferir el l<strong>la</strong>mador originalEn esta sección se describe cómo transferir el contexto de <strong>seguridad</strong> del l<strong>la</strong>madororiginal a través de una aplicación <strong>Web</strong> de ASP.NET hasta un servicio <strong>Web</strong> ubicado<strong>en</strong> un servidor de aplicaciones remoto. Quizás necesite recurrir a este procedimi<strong>en</strong>to<strong>para</strong> que un servicio <strong>Web</strong> sea compatible con <strong>la</strong> autorización por usuario, o bi<strong>en</strong>próximos subsistemas indirectos (como bases de datos <strong>en</strong> <strong>la</strong>s que se deseeautorizar a los l<strong>la</strong>madores originales con re<strong>la</strong>ción a objetos de base de datosindividuales).La ilustración 10.5 refleja el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original (Alice) ycómo se transfiere a través del servidor <strong>Web</strong> de cli<strong>en</strong>te que aloja una aplicación <strong>Web</strong>de ASP.NET hasta el objeto remoto, alojado por ASP.NET <strong>en</strong> un servidor deaplicaciones remotas, y finalm<strong>en</strong>te a través de un servidor de bases de datos deservidor.{Insert figure: CH10 – Flowing original caller with <strong>Web</strong> Service.gif}Ilustración 10.5Transferir el contexto de <strong>seguridad</strong> del l<strong>la</strong>mador originalPara transferir <strong>la</strong>s cred<strong>en</strong>ciales a un servicio <strong>Web</strong>, el cli<strong>en</strong>te del servicio <strong>Web</strong> (<strong>la</strong>aplicación <strong>Web</strong> de ASP.NET <strong>en</strong> este esc<strong>en</strong>ario <strong>en</strong> concreto) debe configurar el proxyde servicio <strong>Web</strong> y establecer de forma expresa <strong>la</strong> propiedad Cred<strong>en</strong>tials del proxy,como se describe <strong>en</strong> el apartado "Transmitir cred<strong>en</strong>ciales <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación deservicios <strong>Web</strong>" que figura anteriorm<strong>en</strong>te <strong>en</strong> este capítulo.Ti<strong>en</strong>e a su disposición dos métodos <strong>para</strong> transferir el contexto del l<strong>la</strong>mador.Transferir <strong>la</strong>s cred<strong>en</strong>ciales predeterminadas y utilizar <strong>la</strong> aut<strong>en</strong>ticaciónKerberos (y <strong>la</strong> delegación). Este <strong>en</strong>foque requiere el uso de <strong>la</strong> sup<strong>la</strong>ntación<strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> de ASP.NET y <strong>la</strong> configuración del proxy de objetoremoto con el elem<strong>en</strong>to <strong>De</strong>faultCred<strong>en</strong>tials obt<strong>en</strong>ido del contexto de<strong>seguridad</strong> del l<strong>la</strong>mador sup<strong>la</strong>ntado.Transferir <strong>la</strong>s cred<strong>en</strong>ciales explícitas y utilizar <strong>la</strong> aut<strong>en</strong>ticación básica omediante Formu<strong>la</strong>rios. Este <strong>en</strong>foque no requiere el uso de funciones desup<strong>la</strong>ntación <strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> de ASP.NET. En cambio, es precisoconfigurar programáticam<strong>en</strong>te el proxy de servicio <strong>Web</strong> con cred<strong>en</strong>cialesexplícitas obt<strong>en</strong>idas bi<strong>en</strong> de variables de servidor (<strong>en</strong> el caso de <strong>la</strong>aut<strong>en</strong>ticación básica) bi<strong>en</strong> de campos de formu<strong>la</strong>rios HTML (<strong>en</strong> el caso de <strong>la</strong>aut<strong>en</strong>ticación mediante Formu<strong>la</strong>rios) disponibles <strong>para</strong> <strong>la</strong> aplicación <strong>Web</strong>. Tanto<strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación básica como mediante Formu<strong>la</strong>rios, el nombre de usuarioy <strong>la</strong> contraseña están disponibles <strong>en</strong> formato de texto sin cifrar.


Cred<strong>en</strong>ciales predeterminadas con delegación KerberosPara utilizar <strong>la</strong> delegación Kerberos, todos los equipos (servidores y cli<strong>en</strong>tes) deb<strong>en</strong>ejecutar Windows 2000 o versiones posteriores. Por otra parte, <strong>la</strong>s cu<strong>en</strong>tas de cli<strong>en</strong>teque vayan a delegarse deberán almac<strong>en</strong>arse <strong>en</strong> Active Directory y no marcars<strong>en</strong>unca como ”Confid<strong>en</strong>cial y no se puede delegar”.Las tab<strong>la</strong>s que figuran a continuación muestran los pasos de configuración quedeb<strong>en</strong> llevarse a cabo <strong>en</strong> el servidor <strong>Web</strong>, así como <strong>en</strong> el servidor de aplicaciones.Configurar el servidor <strong>Web</strong>Configurar IISPaso<strong>De</strong>shabilitar el accesoanónimo <strong>para</strong> el directorioraíz virtual de <strong>la</strong> aplicación<strong>Web</strong>Habilitar <strong>la</strong> aut<strong>en</strong>ticaciónintegrada de Windows <strong>para</strong>el directorio raíz virtual de<strong>la</strong> aplicación <strong>Web</strong>Configurar ASP.NETPasoConfigurar <strong>la</strong> aplicación<strong>Web</strong> de ASP.NET <strong>para</strong>utilizar <strong>la</strong> aut<strong>en</strong>ticación deWindowsMás informaciónLa aut<strong>en</strong>ticación Kerberos se negociará t<strong>en</strong>i<strong>en</strong>do <strong>en</strong>cu<strong>en</strong>ta que tanto los cli<strong>en</strong>tes como el servidor ejecutanWindows 2000 o versiones posteriores.Nota: si ya utiliza Internet Explorer 6 <strong>en</strong> Windows 2000, elvalor predeterminado es <strong>la</strong> aut<strong>en</strong>ticación NTLM <strong>en</strong> vez de<strong>la</strong> aut<strong>en</strong>ticación Kerberos que se precisa <strong>en</strong> este contexto.Para habilitar <strong>la</strong> delegación Kerberos, consulte el artículoQ299838, "Unable to Negotiate Kerberos Auth<strong>en</strong>ticationafter upgrading to Internet Explorer 6" (<strong>en</strong> inglés) <strong>en</strong> <strong>la</strong>Knowledge Base de Microsoft.Más informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:Configurar <strong>la</strong> aplicación<strong>Web</strong> de ASP.NET <strong>para</strong> <strong>la</strong>sup<strong>la</strong>ntaciónModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indica acontinuación:Configurar el proxy de servicio <strong>Web</strong>PasoMás informaciónEstablecer <strong>la</strong> propiedad decred<strong>en</strong>ciales del proxy deservicio <strong>Web</strong> <strong>en</strong><strong>De</strong>faultCred<strong>en</strong>tials.Consulte el apartado "Utilizar <strong>De</strong>faultCred<strong>en</strong>tials" quefigura más arriba <strong>en</strong> este capítulo <strong>para</strong> obt<strong>en</strong>er muestrasde código.Configurar el servidor de aplicaciones remotoConfigurar IISPasoMás información


<strong>De</strong>shabilitar el accesoanónimo <strong>para</strong> el directorioraíz virtual del servicio <strong>Web</strong>Habilitar <strong>la</strong> aut<strong>en</strong>ticaciónintegrada de Windows <strong>para</strong>el directorio raíz virtual de<strong>la</strong> aplicación <strong>Web</strong>Configurar ASP.NET (host del servicio <strong>Web</strong>)PasoConfigurar ASP.NET <strong>para</strong>utilizar <strong>la</strong> aut<strong>en</strong>ticación deWindowsMás informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual delservicio <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:Configurar ASP.NET <strong>para</strong><strong>la</strong> sup<strong>la</strong>ntaciónModifique el archivo <strong>Web</strong>.config del directorio virtual delservicio <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indica acontinuación:Nota: este paso sólo es necesario si se desea transferir elcontexto de <strong>seguridad</strong> del l<strong>la</strong>mador original al sigui<strong>en</strong>t<strong>en</strong>ivel indirecto (una base de datos por ejemplo) a travésdel servicio <strong>Web</strong>. Si está habilitada <strong>la</strong> sup<strong>la</strong>ntación, e<strong>la</strong>cceso a los recursos (tanto local como remoto) utilizaráel contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original sup<strong>la</strong>ntado.Si sus necesidades se limitan a permitir comprobacionesde autorización por usuario <strong>en</strong> el servicio <strong>Web</strong>, nonecesitará utilizar <strong>la</strong> sup<strong>la</strong>ntación.Más informaciónPara obt<strong>en</strong>er más información acerca de cómo configurar <strong>la</strong> delegación Kerberos,consulte "Cómo implem<strong>en</strong>tar <strong>la</strong> delegación Kerberos <strong>para</strong> Windows 2000" <strong>en</strong> <strong>la</strong>sección de refer<strong>en</strong>cia de este manual.Cred<strong>en</strong>ciales explícitas con aut<strong>en</strong>ticación básica omediante Formu<strong>la</strong>riosComo alternativa a <strong>la</strong> delegación Kerberos, puede utilizar <strong>la</strong> aut<strong>en</strong>ticación básica omediante Formu<strong>la</strong>rios <strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>para</strong> capturar <strong>la</strong>s cred<strong>en</strong>ciales del cli<strong>en</strong>tey utilizar a continuación <strong>la</strong> aut<strong>en</strong>ticación básica (o integrada de Windows) <strong>para</strong> elservicio <strong>Web</strong>.Gracias a este <strong>en</strong>foque, <strong>la</strong> aplicación <strong>Web</strong> ti<strong>en</strong>e a su disposición <strong>la</strong>s cred<strong>en</strong>ciales delcli<strong>en</strong>te <strong>en</strong> formato de texto sin cifrar. Éstas se pued<strong>en</strong> transferir al servicio <strong>Web</strong> através del proxy de servicio <strong>Web</strong>. Para hacerlo, escriba el código pertin<strong>en</strong>te <strong>en</strong> <strong>la</strong>aplicación <strong>Web</strong> que le permita recuperar <strong>la</strong>s cred<strong>en</strong>ciales del cli<strong>en</strong>te y configurar elproxy.


Aut<strong>en</strong>ticación básicaGracias a <strong>la</strong> aut<strong>en</strong>ticación básica, <strong>la</strong>s cred<strong>en</strong>ciales del l<strong>la</strong>mador original estándisponibles <strong>para</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>en</strong> formato de variables de servidor. El sigui<strong>en</strong>tefragm<strong>en</strong>to de código muestra cómo recuperar<strong>la</strong>s y configurar el proxy de servicio<strong>Web</strong>.// Retrieve cli<strong>en</strong>t's cred<strong>en</strong>tials (avai<strong>la</strong>ble with Basic auth<strong>en</strong>tication)string pwd = Request.ServerVariables["AUTH_PASSWORD"];string uid = Request.ServerVariables["AUTH_USER"];// Associate the cred<strong>en</strong>tials with the <strong>Web</strong> service proxy// To improve performance, force preauth<strong>en</strong>ticationproxy.PreAuth<strong>en</strong>ticate = true;// Set the cred<strong>en</strong>tialsCred<strong>en</strong>tialCache cache = new Cred<strong>en</strong>tialCache();cache.Add( new Uri(proxy.Url),"Basic",new <strong>Net</strong>workCred<strong>en</strong>tial(uid, pwd, domain) );proxy.Cred<strong>en</strong>tials = cache;Aut<strong>en</strong>ticación mediante Formu<strong>la</strong>riosLa aut<strong>en</strong>ticación mediante Formu<strong>la</strong>rios permite que <strong>la</strong>s cred<strong>en</strong>ciales del l<strong>la</strong>madororiginal están disponibles <strong>para</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>en</strong> formato de campos deformu<strong>la</strong>rio (<strong>en</strong> vez de <strong>en</strong> formato de variables de servidor). En estos casos, utilice elsigui<strong>en</strong>te fragm<strong>en</strong>to de código.// Retrieve cli<strong>en</strong>t's cred<strong>en</strong>tials from the logon formstring pwd = txtPassword.Text;string uid = txtUid.Text;// Associate the cred<strong>en</strong>tials with the <strong>Web</strong> service proxy// To improve performance, force preauth<strong>en</strong>ticationproxy.PreAuth<strong>en</strong>ticate = true;// Set the cred<strong>en</strong>tialsCred<strong>en</strong>tialCache cache = new Cred<strong>en</strong>tialCache();cache.Add( new Uri(proxy.Url),"Basic",new <strong>Net</strong>workCred<strong>en</strong>tial(uid, pwd, domain) );proxy.Cred<strong>en</strong>tials = cache;Las tab<strong>la</strong>s que figuran a continuación muestran los pasos de configuración quedeb<strong>en</strong> llevarse a cabo <strong>en</strong> el servidor <strong>Web</strong>, así como <strong>en</strong> el servidor de aplicaciones.Configurar el servidor <strong>Web</strong>Configurar IISPasoPara utilizar <strong>la</strong>aut<strong>en</strong>ticación básica,deshabilitar el accesoanónimo <strong>para</strong> el directorioraíz virtual de <strong>la</strong> aplicación<strong>Web</strong> y seleccionar <strong>la</strong>aut<strong>en</strong>ticación básicaMás informaciónTanto <strong>la</strong> aut<strong>en</strong>ticación básica como <strong>la</strong> aut<strong>en</strong>ticaciónmediante Formu<strong>la</strong>rios deberían utilizarse junto con SSL<strong>para</strong> proteger <strong>la</strong>s cred<strong>en</strong>ciales <strong>en</strong> formato de texto sincifrar que se <strong>en</strong>vían a través de <strong>la</strong> red. Si utiliza <strong>la</strong>aut<strong>en</strong>ticación básica, debería utilizar SSL <strong>para</strong> todas <strong>la</strong>spáginas (no sólo <strong>para</strong> <strong>la</strong> página de inicio de sesión inicial),puesto que <strong>la</strong>s cred<strong>en</strong>ciales básicas se transmit<strong>en</strong> contodas y cada una de <strong>la</strong>s solicitudes.


- O bi<strong>en</strong> -Para utilizar <strong>la</strong>aut<strong>en</strong>ticación medianteFormu<strong>la</strong>rios, habilitar e<strong>la</strong>cceso anónimoConfigurar ASP.NETPasoSi se utiliza <strong>la</strong> aut<strong>en</strong>ticaciónbásica, configurar <strong>la</strong>aplicación <strong>Web</strong> deASP.NET <strong>para</strong> utilizar <strong>la</strong>aut<strong>en</strong>ticación de Windows- O bi<strong>en</strong> -<strong>De</strong>l mismo modo, debería utilizar SSL <strong>para</strong> todas <strong>la</strong>spáginas si utiliza <strong>la</strong> aut<strong>en</strong>ticación mediante Formu<strong>la</strong>rios afin de proteger <strong>la</strong>s cred<strong>en</strong>ciales de texto sin cifrar duranteel inicio de sesión y de proteger también el vale deaut<strong>en</strong>ticación que se transfiere <strong>en</strong> solicitudes posteriores.Más informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:Si se utiliza <strong>la</strong> aut<strong>en</strong>ticaciónmediante Formu<strong>la</strong>rios,configurar <strong>la</strong> aplicación<strong>Web</strong> de ASP.NET <strong>para</strong>utilizar <strong>la</strong> aut<strong>en</strong>ticaciónmediante Formu<strong>la</strong>rios- O bi<strong>en</strong> -Modifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:<strong>De</strong>shabilitar <strong>la</strong> sup<strong>la</strong>ntaciónde <strong>la</strong> aplicación <strong>Web</strong> deASP.NETModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indica acontinuación:Configurar el proxy de servicio <strong>Web</strong>PasoMás informaciónEscribir código <strong>para</strong>capturar y establecerexplícitam<strong>en</strong>te <strong>la</strong>scred<strong>en</strong>ciales del proxy deservicio <strong>Web</strong>Nota: este código equivale a suprimir el elem<strong>en</strong>to.No se requiere <strong>la</strong> sup<strong>la</strong>ntación, dado que <strong>la</strong>s cred<strong>en</strong>cialesdel usuario se transferirán de forma expresa al servicio<strong>Web</strong> a través del proxy.Consulte los fragm<strong>en</strong>tos de código incluidos <strong>en</strong> <strong>la</strong>ssecciones de aut<strong>en</strong>ticación básica y medianteFormu<strong>la</strong>rios.Configurar el servidor de aplicacionesConfigurar IIS


Paso<strong>De</strong>shabilitar el accesoanónimo <strong>para</strong> el directorioraíz virtual de <strong>la</strong> aplicaciónMás informaciónHabilitar <strong>la</strong> aut<strong>en</strong>ticaciónbásicaNota: <strong>la</strong> aut<strong>en</strong>ticación básica del servidor de aplicaciones(servicio <strong>Web</strong>) permite que el servicio <strong>Web</strong> transfiera elcontexto de <strong>seguridad</strong> del l<strong>la</strong>mador original a <strong>la</strong> base dedatos (dado que el nombre de usuario y <strong>la</strong> contraseña dell<strong>la</strong>mador están disponibles <strong>en</strong> formato de texto sin cifrar ypued<strong>en</strong> utilizarse <strong>para</strong> responder a los desafíos deaut<strong>en</strong>ticación de red desde el servidor de bases de datos).Si no necesita transferir el contexto de <strong>seguridad</strong> dell<strong>la</strong>mador original más allá del servicio <strong>Web</strong>, considere <strong>la</strong>posibilidad de configurar IIS <strong>en</strong> el servidor de aplicaciones<strong>para</strong> que utilice <strong>la</strong> aut<strong>en</strong>ticación integrada de Windows,puesto que con ello se mejora <strong>la</strong> <strong>seguridad</strong> y <strong>la</strong>scred<strong>en</strong>ciales no se transmit<strong>en</strong> a través de <strong>la</strong> red ni estándisponibles <strong>para</strong> el servicio <strong>Web</strong>.Configurar ASP.NET (servicio <strong>Web</strong>)PasoConfigurar ASP.NET <strong>para</strong>utilizar <strong>la</strong> aut<strong>en</strong>ticación deWindowsMás informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual delservicio <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:Configurar el servicio <strong>Web</strong>de ASP.NET <strong>para</strong> <strong>la</strong>sup<strong>la</strong>ntaciónModifique el archivo <strong>Web</strong>.config del directorio virtual delservicio <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indica acontinuación:Nota: este paso sólo es necesario si se desea transferir elcontexto de <strong>seguridad</strong> del l<strong>la</strong>mador original al sigui<strong>en</strong>t<strong>en</strong>ivel indirecto (una base de datos por ejemplo) a travésdel servicio <strong>Web</strong>. Si está habilitada <strong>la</strong> sup<strong>la</strong>ntación, e<strong>la</strong>cceso a los recursos (tanto local como remoto) utilizaráel contexto de <strong>seguridad</strong> del l<strong>la</strong>mador original sup<strong>la</strong>ntado.Si sus necesidades se limitan a permitir comprobacionesde autorización por usuario <strong>en</strong> el servicio <strong>Web</strong>, nonecesitará utilizar <strong>la</strong> sup<strong>la</strong>ntación.Subsistema de confianzaEl modelo del subsistema de confianza constituye un <strong>en</strong>foque alternativo (máss<strong>en</strong>cillo de implem<strong>en</strong>tar) <strong>para</strong> <strong>la</strong> transmisión del contexto de <strong>seguridad</strong> del l<strong>la</strong>madororiginal. En este modelo existe un límite de confianza <strong>en</strong>tre el servicio <strong>Web</strong> y <strong>la</strong>aplicación <strong>Web</strong>. El servicio <strong>Web</strong> confía <strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>para</strong> que aut<strong>en</strong>tique yautorice correctam<strong>en</strong>te a los l<strong>la</strong>madores, antes de que permitir que <strong>la</strong>s solicitudes


llegu<strong>en</strong> al servicio <strong>Web</strong>. En el servicio <strong>Web</strong> no se lleva a cabo aut<strong>en</strong>ticación algunade los l<strong>la</strong>madores originales. El servicio <strong>Web</strong> aut<strong>en</strong>tica <strong>la</strong> id<strong>en</strong>tidad fija de confianzautilizada por <strong>la</strong> aplicación <strong>Web</strong> <strong>para</strong> <strong>la</strong> comunicación con el servicio <strong>Web</strong>. En <strong>la</strong>mayoría de los casos, se trata de <strong>la</strong> id<strong>en</strong>tidad del proceso de trabajo de ASP.NET.El modelo de subsistema de confianza se refleja <strong>en</strong> <strong>la</strong> ilustración 10.6.{Insert figure: CH10 – Trusted subsystem with <strong>Web</strong> service.gif}Ilustración 10.6El modelo de subsistema de confianzaTransmitir <strong>la</strong> id<strong>en</strong>tidad del l<strong>la</strong>madorSi utiliza el modelo de subsistema de confianza, quizás necesite transmitir <strong>la</strong>id<strong>en</strong>tidad del l<strong>la</strong>mador original (el nombre, no el contexto de <strong>seguridad</strong>), por ejemplo,por motivos de auditoría de <strong>la</strong> base de datos.Puede transferir <strong>la</strong> id<strong>en</strong>tidad desde <strong>la</strong> aplicación mediante un método. Por otra parte,puede utilizar los parámetros de procedimi<strong>en</strong>tos almac<strong>en</strong>ados y los parámetros deconsulta de confianza (como muestra el sigui<strong>en</strong>te ejemplo) <strong>para</strong> recuperar datosespecíficos de usuario de <strong>la</strong> base de datos.SELECT x,y,z FROM SomeTable WHERE UserName = "Alice"Pasos de configuraciónLas tab<strong>la</strong>s que figuran a continuación muestran los pasos de configuración quedeb<strong>en</strong> llevarse a cabo <strong>en</strong> el servidor <strong>Web</strong>, así como <strong>en</strong> el servidor de aplicaciones.Configurar el servidor <strong>Web</strong>Configurar IISPasoConfigurar <strong>la</strong> aut<strong>en</strong>ticaciónde IISConfigurar ASP.NETPasoConfigurar <strong>la</strong> aut<strong>en</strong>ticacióny comprobar que <strong>la</strong>sup<strong>la</strong>ntación estédeshabilitadaMás informaciónLa aplicación <strong>Web</strong> puede utilizar cualquier forma deaut<strong>en</strong>ticación <strong>para</strong> aut<strong>en</strong>ticar a los l<strong>la</strong>madores originales.Más informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación <strong>Web</strong>.Establezca el elem<strong>en</strong>to <strong>en</strong> “Windows”,“Forms” o “Passport”.Establezca el elem<strong>en</strong>to como se indica acontinuación:


Restablecer <strong>la</strong> contraseñade <strong>la</strong> cu<strong>en</strong>ta de ASPNETutilizada <strong>para</strong> ejecutarASP.NET O BIEN crearuna cu<strong>en</strong>ta de dominio conprivilegios mínimos <strong>para</strong>ejecutar ASP.NET yespecificar informacióndetal<strong>la</strong>da de <strong>la</strong> cu<strong>en</strong>ta <strong>en</strong> elelem<strong>en</strong>to del archivo <strong>Web</strong>.configConfigurar el proxy de servicio <strong>Web</strong>PasoConfigurar el proxy deservicio <strong>Web</strong> <strong>para</strong> utilizar<strong>la</strong>s cred<strong>en</strong>cialespredeterminadas <strong>para</strong>todas <strong>la</strong>s l<strong>la</strong>madas alservicio <strong>Web</strong>(O BIEN, elimine el elem<strong>en</strong>to ).Si desea obt<strong>en</strong>er más información acerca de cómoobt<strong>en</strong>er acceso a los recursos de red (incluidos losservicios <strong>Web</strong>) desde ASP.NET y acerca de cómoseleccionar y configurar una cu<strong>en</strong>ta de proceso <strong>para</strong>ASP.NET, consulte <strong>la</strong>s secciones "Obt<strong>en</strong>er acceso arecursos de red" e "Id<strong>en</strong>tidad del proceso <strong>para</strong> ASP.NET"<strong>en</strong> el capítulo 8, "Seguridad de ASP.NET".Más informaciónUtilice <strong>la</strong> sigui<strong>en</strong>te línea de código:proxy.Cred<strong>en</strong>tials = <strong>De</strong>faultCred<strong>en</strong>tials;Configurar el servidor de aplicacionesConfigurar IISPaso<strong>De</strong>shabilitar el accesoanónimo <strong>para</strong> el directorioraíz virtual del servicio <strong>Web</strong>Más informaciónHabilitar <strong>la</strong> aut<strong>en</strong>ticación deWindows integradaConfigurar ASP.NETPasoConfigurar ASP.NET <strong>para</strong>utilizar <strong>la</strong> aut<strong>en</strong>ticación deWindowsMás informaciónModifique el archivo <strong>Web</strong>.config del directorio virtual delservicio <strong>Web</strong>.Establezca el elem<strong>en</strong>to como se indicaa continuación:<strong>De</strong>shabilitar <strong>la</strong> sup<strong>la</strong>ntaciónModifique el archivo <strong>Web</strong>.config del directorio virtual de <strong>la</strong>aplicación.Establezca el elem<strong>en</strong>to como se indica acontinuación:


Obt<strong>en</strong>er acceso a recursos del sistemaPara obt<strong>en</strong>er información detal<strong>la</strong>da sobre el acceso a los recursos del sistema (porejemplo, al registro de sucesos y al registro) de los servicios <strong>Web</strong> de ASP.NET,consulte el apartado "Obt<strong>en</strong>er acceso a recursos de sistema" del capítulo 8,"Seguridad de ASP.NET". Los <strong>en</strong>foques y <strong>la</strong>s restricciones abordados <strong>en</strong> el capítulo8 también son válidos <strong>para</strong> los servicios <strong>Web</strong> de ASP.NET.Obt<strong>en</strong>er acceso a recursos de redCuando obt<strong>en</strong>ga acceso a recursos de red desde un servicio <strong>Web</strong>, debe t<strong>en</strong>er <strong>en</strong>consideración <strong>la</strong> id<strong>en</strong>tidad utilizada <strong>para</strong> responder a los desafíos de aut<strong>en</strong>ticaciónde <strong>la</strong> red desde el equipo remoto. Exist<strong>en</strong> tres opciones:La id<strong>en</strong>tidad de proceso (determinada por <strong>la</strong> cu<strong>en</strong>ta utilizada <strong>para</strong> ejecutar elproceso de trabajo de ASP.NET)Una id<strong>en</strong>tidad de servicio (por ejemplo, una creada l<strong>la</strong>mando a <strong>la</strong> interfazLogonUser)La id<strong>en</strong>tidad del l<strong>la</strong>mador original (con el servicio <strong>Web</strong> configurado <strong>para</strong> <strong>la</strong>sup<strong>la</strong>ntación)Para obt<strong>en</strong>er información detal<strong>la</strong>da acerca de los b<strong>en</strong>eficios que reporta cada uno deestos <strong>en</strong>foques, junto con información porm<strong>en</strong>orizada de configuración, consulte e<strong>la</strong>partado "Obt<strong>en</strong>er acceso a recursos de red" del capítulo 8, "Seguridad deASP.NET".Obt<strong>en</strong>er acceso a los objetos COMLa directiva AspCompat (utilizada por <strong>la</strong>s aplicaciones <strong>Web</strong> cuando l<strong>la</strong>man a objetosCOM de subprocesami<strong>en</strong>to contro<strong>la</strong>do) no está disponible <strong>para</strong> los servicios <strong>Web</strong>.Esto significa que cuando se l<strong>la</strong>ma a objetos de modelo de subprocesami<strong>en</strong>tocontro<strong>la</strong>do desde servicios <strong>Web</strong>, se produce un intercambio de subproceso. Elresultado es una ligera disminución del r<strong>en</strong>dimi<strong>en</strong>to, y si el servicio <strong>Web</strong> aplica <strong>la</strong>sup<strong>la</strong>ntación, el testigo de sup<strong>la</strong>ntación se perderá al l<strong>la</strong>mar al compon<strong>en</strong>te COM.Como consecu<strong>en</strong>cia suele g<strong>en</strong>erarse una excepción de acceso d<strong>en</strong>egado.Más informaciónPara obt<strong>en</strong>er más información acerca de <strong>la</strong>s excepciones de acceso d<strong>en</strong>egadocuando se l<strong>la</strong>ma a objetos COM de subprocesami<strong>en</strong>to contro<strong>la</strong>do, consulte e<strong>la</strong>rtículo Q325791,"PRB: Access <strong>De</strong>nied Error Message Occurs Wh<strong>en</strong>Impersonating in ASP.NET and Calling STA COM Compon<strong>en</strong>ts" (<strong>en</strong> inglés) <strong>en</strong><strong>la</strong> Knowledge Base de Microsoft.Para obt<strong>en</strong>er más información acerca de cómo obt<strong>en</strong>er acceso a los objetosCOM y utilizar el atributo AspCompat, consulte el apartado "Obt<strong>en</strong>er acceso alos objetos COM" del capítulo 8, "Seguridad de ASP.NET".Para obt<strong>en</strong>er más información acerca de cómo l<strong>la</strong>mar a objetos COM desubprocesami<strong>en</strong>to contro<strong>la</strong>do desde los servicios <strong>Web</strong>, consulte el artículoQ303375, "INFO: XML <strong>Web</strong> Services and Apartm<strong>en</strong>t Objects" (<strong>en</strong> inglés), de <strong>la</strong>Knowledge Base de Microsoft.Utilizar certificados de cli<strong>en</strong>te con los servicios<strong>Web</strong>En esta sección se describ<strong>en</strong> <strong>la</strong>s técnicas <strong>para</strong> utilizar los certificados de cli<strong>en</strong>teX.509 <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación de servicios <strong>Web</strong>.


Puede utilizar <strong>la</strong> aut<strong>en</strong>ticación mediante certificados de cli<strong>en</strong>te desde un servicio<strong>Web</strong> <strong>para</strong> aut<strong>en</strong>ticar los sigui<strong>en</strong>tes elem<strong>en</strong>tos:Otros servicios <strong>Web</strong>Aplicaciones que se comunican directam<strong>en</strong>te con el servicio <strong>Web</strong> (porejemplo, aplicaciones basadas <strong>en</strong> servidores o aplicaciones de escritorio decli<strong>en</strong>te)Aut<strong>en</strong>ticar cli<strong>en</strong>tes de explorador <strong>Web</strong> mediantecertificadosUn servicio <strong>Web</strong> no puede utilizar certificados de cli<strong>en</strong>te <strong>para</strong> aut<strong>en</strong>ticar a losl<strong>la</strong>madores si éstos interactúan con una aplicación <strong>Web</strong> intermedia, puesto que no esposible re<strong>en</strong>viar el certificado del l<strong>la</strong>mador original al servicio <strong>Web</strong> a través de <strong>la</strong>aplicación <strong>Web</strong>. Mi<strong>en</strong>tras que <strong>la</strong> aplicación <strong>Web</strong> puede aut<strong>en</strong>ticar a sus propioscli<strong>en</strong>tes mediante certificados, dichos certificados no pued<strong>en</strong> utilizarse <strong>en</strong> el servicio<strong>Web</strong> <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación.El motivo por el que da errores este esc<strong>en</strong>ario “servidor a servidor” es que <strong>la</strong>aplicación <strong>Web</strong> no ti<strong>en</strong>e acceso al certificado del cli<strong>en</strong>te (<strong>en</strong> especial a <strong>la</strong> c<strong>la</strong>veprivada) de su almacén de certificados. Este problema se muestra <strong>en</strong> <strong>la</strong> ilustración10.7.{Insert figure: CH10 - <strong>Web</strong> service server-to-server certificate problem.gif}Ilustración 10.7Aut<strong>en</strong>ticación mediante certificados de cli<strong>en</strong>te del servicio <strong>Web</strong>Utilizar el modelo de subsistema de confianzaLa solución a esta restricción pasa por utilizar un modelo de subsistema de confianzaque, además, reporta compatibilidad <strong>para</strong> <strong>la</strong> aut<strong>en</strong>ticación mediante certificados <strong>en</strong> elservicio <strong>Web</strong>. Con este <strong>en</strong>foque, el servicio <strong>Web</strong> aut<strong>en</strong>tica <strong>la</strong> aplicación <strong>Web</strong>mediante el certificado de <strong>la</strong> aplicación <strong>Web</strong> (no con el certificado del l<strong>la</strong>madororiginal). El servicio <strong>Web</strong> confía <strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>para</strong> aut<strong>en</strong>ticar a sus usuariosy llevar a cabo <strong>la</strong> autorización necesaria que garantice que sólo los l<strong>la</strong>madoresautorizados sean capaces de obt<strong>en</strong>er acceso a los datos y <strong>la</strong>s funciones expuestospor el servicio <strong>Web</strong>.Este <strong>en</strong>foque queda reflejado <strong>en</strong> <strong>la</strong> ilustración 10.8.


{Insert figure: CH10 - <strong>Web</strong> Service Certificate Auth<strong>en</strong>tication – TrustedSubsystem.gif}Ilustración 10.8El servicio <strong>Web</strong> aut<strong>en</strong>tica <strong>la</strong> aplicación <strong>Web</strong> de confianzaSi <strong>la</strong> lógica de autorización del servicio <strong>Web</strong> requiere varias funciones, <strong>la</strong> aplicación<strong>Web</strong> podrá <strong>en</strong>viar certificados distintos según <strong>la</strong> función a <strong>la</strong> que pert<strong>en</strong>ezca ell<strong>la</strong>mador. Por ejemplo, puede utilizarse un certificado <strong>para</strong> miembros de un grupoAdministradores (con permisos <strong>para</strong> actualizar los datos de una base de datosservidor) y otro certificado <strong>para</strong> el resto de los usuarios (con autorización <strong>para</strong>operaciones de lectura exclusivam<strong>en</strong>te).Nota: <strong>en</strong> esc<strong>en</strong>arios como éste existe <strong>la</strong> posibilidad de utilizar un servidor decertificados local (al que sólo pued<strong>en</strong> obt<strong>en</strong>er acceso los dos servidores) <strong>para</strong>administrar todos los certificados de aplicación <strong>Web</strong>.En este esc<strong>en</strong>ario:La aplicación <strong>Web</strong> aut<strong>en</strong>tica a sus usuarios mediante certificados de cli<strong>en</strong>te.La aplicación <strong>Web</strong> actúa como equipo selector y autoriza a sus usuarios,además de contro<strong>la</strong>r el acceso al servicio <strong>Web</strong>.La aplicación <strong>Web</strong> l<strong>la</strong>ma al servicio <strong>Web</strong> y transmite un certificado distinto querepres<strong>en</strong>ta a <strong>la</strong> aplicación (o, quizás, un rango de certificados basados <strong>en</strong> <strong>la</strong>pert<strong>en</strong><strong>en</strong>cia a funciones del l<strong>la</strong>mador).El servicio <strong>Web</strong> aut<strong>en</strong>tica <strong>la</strong> aplicación <strong>Web</strong> y confía <strong>en</strong> <strong>la</strong> aplicación <strong>para</strong>ejecutar <strong>la</strong> autorización de cli<strong>en</strong>te necesaria.Se utiliza IPSec <strong>en</strong>tre el servidor de aplicaciones <strong>Web</strong> y el servidor deservicios <strong>Web</strong> a fin de proporcionar un control de acceso adicional. IPSec evitalos int<strong>en</strong>tos de acceso no autorizado desde otros equipos. La aut<strong>en</strong>ticaciónmediante certificados del servidor de servicios <strong>Web</strong> también evita el acceso noautorizado.Implem<strong>en</strong>tación de solucionesPara utilizar <strong>la</strong> aut<strong>en</strong>ticación de certificados <strong>en</strong> el servicio <strong>Web</strong> de un esc<strong>en</strong>ario comoéste, utilice un proceso indep<strong>en</strong>di<strong>en</strong>te <strong>para</strong> l<strong>la</strong>mar al servicio <strong>Web</strong> y transmitir elcertificado. No deb<strong>en</strong> manipu<strong>la</strong>rse los certificados directam<strong>en</strong>te desde <strong>la</strong> aplicación


<strong>Web</strong> de ASP.NET porque dicha aplicación no dispone de ningún perfil de usuariocargado ni de almacén de certificados asociado. El proceso indep<strong>en</strong>di<strong>en</strong>te debeconfigurarse <strong>para</strong> que se ejecute con una cu<strong>en</strong>ta dotada de un perfil de usuarioasociado (y almacén de certificados). Exist<strong>en</strong> dos opciones básicam<strong>en</strong>te:Utilizar una aplicación de servidor de <strong>Servicios</strong> EmpresarialesUtilizar un servicio WindowsLa ilustración 10.9 muestra este esc<strong>en</strong>ario con una aplicación servidor de <strong>Servicios</strong>Empresariales.{Insert figure: CH10 - <strong>Web</strong> Service Certificate Auth<strong>en</strong>tication.gif}Ilustración 10.9Aut<strong>en</strong>ticación mediante certificados con servicios <strong>Web</strong>A continuación se resume <strong>la</strong> secu<strong>en</strong>cia de ev<strong>en</strong>tos que recopi<strong>la</strong> ilustración 10.9.1. La aplicación <strong>Web</strong> aut<strong>en</strong>tica al l<strong>la</strong>mador original mediante certificados decli<strong>en</strong>te.2. La aplicación <strong>Web</strong> es el equipo selector y, por lo tanto, responsable deautorizar el acceso a determinadas áreas de funcionalidad (incluidas aquél<strong>la</strong>sque supon<strong>en</strong> interacción con el servicio <strong>Web</strong>).3. La aplicación <strong>Web</strong> l<strong>la</strong>ma a un compon<strong>en</strong>te revisado mediante <strong>la</strong> ejecución deuna aplicación de <strong>Servicios</strong> Empresariales fuera de proceso.4. La cu<strong>en</strong>ta utilizada <strong>para</strong> ejecutar <strong>la</strong> aplicación de <strong>Servicios</strong> Empresarialesdispone de un perfil de usuario asociado. El compon<strong>en</strong>te obti<strong>en</strong>e acceso alcertificado del cli<strong>en</strong>te desde su almacén de certificados, que lo utiliza elservicio <strong>Web</strong> <strong>para</strong> aut<strong>en</strong>ticar <strong>la</strong> aplicación <strong>Web</strong>.5. El compon<strong>en</strong>te revisado l<strong>la</strong>ma al servicio <strong>Web</strong> y transmite el certificado delcli<strong>en</strong>te <strong>en</strong> cada solicitud de método. El servicio <strong>Web</strong> aut<strong>en</strong>tica <strong>la</strong> aplicación<strong>Web</strong> mediante este certificado y confía <strong>en</strong> <strong>la</strong> aplicación <strong>Web</strong> <strong>para</strong> que autoricecorrectam<strong>en</strong>te a los l<strong>la</strong>madores originales.¿Por qué utilizar un proceso adicional?La necesidad de un proceso adicional (<strong>en</strong> vez de utilizar el proceso <strong>Web</strong>Aspnet_wp.exe <strong>para</strong> ponerse <strong>en</strong> contacto con el servicio <strong>Web</strong>) se debe a que serequiere un perfil de usuario (que cont<strong>en</strong>ga un almacén de certificados).


Una aplicación <strong>Web</strong> que se ejecuta mediante <strong>la</strong> cu<strong>en</strong>ta ASPNET no ti<strong>en</strong>e acceso aninguno de los certificados del servidor <strong>Web</strong>. El motivo radica <strong>en</strong> que los almac<strong>en</strong>esde certificados se conservan <strong>en</strong> los perfiles de usuario asociados a <strong>la</strong>s cu<strong>en</strong>tas deusuario interactivas. Los perfiles de usuario se crean exclusivam<strong>en</strong>te <strong>para</strong> <strong>la</strong>scu<strong>en</strong>tas interactivas cuando se inicia una sesión física con dichas cu<strong>en</strong>tas. Elobjetivo de <strong>la</strong> cu<strong>en</strong>ta ASPNET no consiste <strong>en</strong> actuar como una cu<strong>en</strong>ta de usuariointeractiva y se configura con el privilegio "<strong>De</strong>negar inicio de sesión interactivo" a finde mejorar <strong>la</strong> <strong>seguridad</strong>.Importante: no vuelva a configurar <strong>la</strong> cu<strong>en</strong>ta ASPNET <strong>para</strong> eliminar este privilegioy convertir<strong>la</strong> <strong>en</strong> una cu<strong>en</strong>ta de inicio de sesión interactivo. Utilice un procesoindep<strong>en</strong>di<strong>en</strong>te con una cu<strong>en</strong>ta de servicio configurada <strong>para</strong> obt<strong>en</strong>er acceso a loscertificados, como se ha descrito anteriorm<strong>en</strong>te <strong>en</strong> este capítulo.Más informaciónPara obt<strong>en</strong>er más información acerca de cómo implem<strong>en</strong>tar este <strong>en</strong>foque,consulte "Cómo l<strong>la</strong>mar a un servicio <strong>Web</strong> mediante certificados de cli<strong>en</strong>te deASPNET" <strong>en</strong> <strong>la</strong> sección de refer<strong>en</strong>cia de este manual.Para obt<strong>en</strong>er más información acerca de <strong>la</strong> configuración de IPSec, consulte"Cómo utilizar IPSec <strong>para</strong> garantizar una comunicación segura <strong>en</strong>tre dosservidores" <strong>en</strong> <strong>la</strong> sección de refer<strong>en</strong>cia de este manual.Comunicación seguraLa comunicación segura hace refer<strong>en</strong>cia a <strong>la</strong> protección de <strong>la</strong> integridad y <strong>la</strong>confid<strong>en</strong>cialidad de los m<strong>en</strong>sajes del servicio <strong>Web</strong> conforme se transmit<strong>en</strong> deaplicación <strong>en</strong> aplicación a través de <strong>la</strong> red. Se han desarrol<strong>la</strong>do dos <strong>en</strong>foques <strong>para</strong>solucionar este problema: opciones <strong>para</strong> el transporte y opciones <strong>para</strong> los m<strong>en</strong>sajes.Opciones <strong>para</strong> el transporteLas opciones <strong>para</strong> el transporte incluy<strong>en</strong>:SSLIPSecEstas opciones resultan apropiadas cuando se cumpl<strong>en</strong> <strong>la</strong>s sigui<strong>en</strong>tes condiciones:Se <strong>en</strong>vía un m<strong>en</strong>saje directam<strong>en</strong>te desde <strong>la</strong> aplicación a un servicio <strong>Web</strong> sinque el m<strong>en</strong>saje se <strong>en</strong>rute a través de ningún sistema intermedio.Es posible contro<strong>la</strong>r <strong>la</strong> configuración de los dos puntos finales implicados <strong>en</strong> <strong>la</strong>transfer<strong>en</strong>cia del m<strong>en</strong>saje.Opciones <strong>para</strong> los m<strong>en</strong>sajesLos <strong>en</strong>foques re<strong>la</strong>tivos a los m<strong>en</strong>sajes permit<strong>en</strong> proteger <strong>la</strong> confid<strong>en</strong>cialidad eintegridad de los m<strong>en</strong>sajes cuando pasan por un número arbitrario de sistemasintermedios. Existe <strong>la</strong> posibilidad de firmar los m<strong>en</strong>sajes <strong>para</strong> dotarlos de integridad.En cuanto a <strong>la</strong> confid<strong>en</strong>cialidad, puede elegir <strong>en</strong>tre cifrar <strong>la</strong> totalidad del m<strong>en</strong>saje oúnicam<strong>en</strong>te una parte del mismo.Utilice un <strong>en</strong>foque <strong>para</strong> m<strong>en</strong>sajes cuando se cump<strong>la</strong>n <strong>la</strong>s sigui<strong>en</strong>tes condiciones:Se <strong>en</strong>vía un m<strong>en</strong>saje a un servicio <strong>Web</strong> y es probable que el m<strong>en</strong>saje sere<strong>en</strong>víe a otros servicios <strong>Web</strong> o que se <strong>en</strong>rute a través de sistemasintermedios.No se ti<strong>en</strong>e control sobre <strong>la</strong> configuración de los dos puntos finales; porejemplo, porque se <strong>en</strong>vían m<strong>en</strong>sajes de una empresa a otra.


Más información<strong>Web</strong> Service <strong>De</strong>velopm<strong>en</strong>t Toolkit incluirá funciones <strong>para</strong> el cifrado dem<strong>en</strong>sajes compatibles con <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security.Si desea obt<strong>en</strong>er más información acerca de SSL e IPSec, consulte el capítulo4, "Comunicación segura".Resum<strong>en</strong>Este capítulo se c<strong>en</strong>tra <strong>en</strong> <strong>la</strong> <strong>seguridad</strong> de los servicios <strong>Web</strong> (punto a punto) re<strong>la</strong>tivatanto a <strong>la</strong> p<strong>la</strong>taforma como al transporte que pued<strong>en</strong> ofrecer los serviciossubyac<strong>en</strong>tes de ASP.NET, IIS y el sistema operativo. Mi<strong>en</strong>tras que <strong>la</strong> <strong>seguridad</strong> de <strong>la</strong>p<strong>la</strong>taforma permite soluciones seguras <strong>para</strong> esc<strong>en</strong>arios de intranet estrecham<strong>en</strong>tevincu<strong>la</strong>dos, no resulta conv<strong>en</strong>i<strong>en</strong>te <strong>para</strong> esc<strong>en</strong>arios heterogéneos. Es por estemotivo precisam<strong>en</strong>te por el que se requiere <strong>la</strong> <strong>seguridad</strong> que ofrece <strong>la</strong> especificaciónde <strong>seguridad</strong> WS-Security de <strong>la</strong> arquitectura GXA. Utilice <strong>Web</strong> Services <strong>De</strong>velopm<strong>en</strong>tKit <strong>para</strong> crear soluciones de <strong>seguridad</strong> de m<strong>en</strong>sajes <strong>para</strong> servicios <strong>Web</strong>.Para <strong>en</strong>tornos de dominios Windows estrecham<strong>en</strong>te vincu<strong>la</strong>dos:Si desea transmitir <strong>la</strong> id<strong>en</strong>tidad del l<strong>la</strong>mador original desde una aplicación <strong>Web</strong>de ASP.NET a un servicio <strong>Web</strong> remoto, <strong>la</strong> aplicación <strong>Web</strong> de ASP.NETdebería utilizar <strong>la</strong> aut<strong>en</strong>ticación Kerberos (con cu<strong>en</strong>tas configuradas <strong>para</strong> <strong>la</strong>delegación), básica o mediante Formu<strong>la</strong>rios.Si utiliza <strong>la</strong> aut<strong>en</strong>ticación Kerberos, habilite <strong>la</strong> sup<strong>la</strong>ntación con <strong>la</strong>aplicación <strong>Web</strong> y configure <strong>la</strong> propiedad Cred<strong>en</strong>tials del proxy de servicio<strong>Web</strong> mediante <strong>De</strong>faultCred<strong>en</strong>tials.Si utiliza <strong>la</strong> aut<strong>en</strong>ticación básica o mediante Formu<strong>la</strong>rios, capture <strong>la</strong>scred<strong>en</strong>ciales del l<strong>la</strong>mador y establezca <strong>la</strong> propiedad Cred<strong>en</strong>tials del proxyde servicio <strong>Web</strong> agregando un nuevo objeto Cred<strong>en</strong>tialCache.Para esc<strong>en</strong>arios “de servicio <strong>Web</strong> a servicio <strong>Web</strong>”:Utilice <strong>la</strong> aut<strong>en</strong>ticación básica o Kerberos y establezca <strong>la</strong>s cred<strong>en</strong>ciales <strong>en</strong> elproxy de cli<strong>en</strong>te.Utilice una aplicación de <strong>Servicios</strong> Empresariales o un servicio de Windowsfuera de proceso <strong>para</strong> que manipule los certificados X.509 desde <strong>la</strong>saplicaciones <strong>Web</strong>.En <strong>la</strong> medida de lo posible, utilice <strong>la</strong>s comprobaciones de autorización desistema como, por ejemplo, <strong>la</strong> autorización mediante archivos y direccionesURL.Si utiliza <strong>la</strong> autorización granu<strong>la</strong>r (<strong>en</strong> el nivel de método <strong>Web</strong> por ejemplo),utilice funciones .NET (tanto de forma dec<strong>la</strong>rativa como imperativa).Autorice a los usuarios que no sean de Windows mediante funciones .NET(basadas <strong>en</strong> un objeto G<strong>en</strong>ericPrincipal que cont<strong>en</strong>ga funciones).<strong>De</strong>shabilite los protocolos HTTP-GET y HTTP-POST <strong>en</strong> todos los servidoresde producto.Utilice <strong>la</strong> <strong>seguridad</strong> de transporte si no le preocupa transferir los m<strong>en</strong>sajes deforma segura a través de sistemas intermedios.Utilice <strong>la</strong> <strong>seguridad</strong> de transporte si el r<strong>en</strong>dimi<strong>en</strong>to de SSL es adecuado.Utilice <strong>la</strong> especificación de <strong>seguridad</strong> WS-Security y <strong>Web</strong> Services<strong>De</strong>velopm<strong>en</strong>t kit <strong>para</strong> desarrol<strong>la</strong>r soluciones <strong>para</strong> m<strong>en</strong>sajes.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!