Seguridad en ASP.NET Daniel Laco danielL@vemn.com.ar
Agenda Como trabaja ASP.NET ? Tipos de Autenticación Seguridad en WebServices Alternativas SSL Con Autenticación Windows Con Cerfiticados
Conceptos Impersonalización Autenticación Autorización
Esquema de Seguridad de ASP.NET
Identidad del Proceso El filtro ISAPI Aspnet_wp.exe Aspnet_isapi.dll El proceso que ejecuta los request El usuario por defecto es Machine Puede también correr con la cuenta ASP.NET o la cuenta configurada en <processModel> <processModel enable="true" timeout="Infinite" ....userName="MACHINE" password="AutoGenerate" ..../>
Servicios de Seguridad Autenticación y autorización en ASP.NET: Extensible y personalizable Esquema de Autenticación transparente Modelo simple de desarrollo Soporte para autorizaciones granulares Soporta seguridad a nivel de aplicación
Indentidad del Request Impersonalización Se ejecuta con el contexto de seguridad de la entidad que hace el Request Configurable en ASP.NET Habilitado para compatibilidad con el comportamiento de ASP <system.web> <identity impersonate="true" /> </system.web>
Autenticación ASP.NET es una extensión ISAPI Solo recibe pedidos para contenido que tenga un “mapeo” Windows Authentication (vía IIS) Basic, Digest, NTLM, Kerberos, IIS Certificate Autenticación basada en Formularios (Cookie) Verificación de credencial a nivel de Aplicación Soporta Microsoft® Passport Autenticación Personalizada Tiene un modelo simple de desarrollo
Configuración - Aplicaciones Control administrativo sobre la configuración Usado para forzar políticas de seguridad o restricciones en el comportamiento de una aplicación <location path="site1/application1" allowOverride="false"> <system.web> <identity impersonate="true"/> </system.web> </location>
Autorización por URL Ejemplo: permite “Admins” o “WebServiceUsers” y deniega todos los otros usuarios Ejemplo: no permite usuarios anónimos <!-- * is all users, ? is anonymous users --> <authorization> <allow verbs="POST" Roles="Admins" /> <allow Roles="WebServiceUsers"/> <deny users="*" /> </authorization> <authorization> <deny users="?" /> </authorization>
Microsoft Passport Un solo ingreso a través de múltiples sitios Servicio de perfil de usuario Integrado dentro de la autenticación de ASP .NET Requiere la instalación del Passport SDK Mas detalles en http://www.passport.com
Autenticación basada en Formularios Fácil de implementar ASP .NET provee redirección Pasos Configure IIS para que permita usuarios anónimos (típicamente) Use SSL! Configure ASP.NET con autenticación por cookie Escriba su página de Login
Autenticación basada en Formularios <authentication mode= "Forms"> <forms name=".ASPXAUTH" loginUrl="login.aspx" protection="all" timeout="30" path="/" /> </authentication>
Controlando los Request HTTPHandlers HTTPModules
Proceso de Request en ASP.NET Page ASP.NET Service HTTP Handler Application Http Context HTTP Module HTTP Module Global.asax .NET Code ASP.NET Runtime Native Code Host (IIS)
Autenticación Personalizada Evento Handle AuthenticateRequest Nivel de Aplicación (global.asax) o Http Module (implementar IHttpModule) Escenarios: Autenticación SOAP personalizada Ej., la aplicación define esquemas basado en los headers de SOAP Autenticación de formularios para dispositivos móviles que no tienen cookies.
Autorización Web Personalizada Maneja el evento AuthorizeRequest A nivel de aplicación (global.asax) o Http Module (implementar IHttpModule) Escenarios: Implementar un sistema pago por request Restringir el acceso basado en reglas del negocio Restringir el acceso basado en comportamientos variables (Ej., límite de acceso por día,, etc.).
Roles personalizados Maneja el evento authentication Reemplace HttpContext.User con un objeto personalizado de IPrincipal o GenericPrincipal public void WindowsAuthentication_OnAuthenticate( Object src, WindowsAuthenticationEvent e) { // reemplace HttpContext Principal e.Context.User = new MyPrincipal(e.Identity); }
Seguridad de Acceso por Código Las aplicaciones Web pueden configurarse con diferentes grados de confianza Trust setting determina los permisos Ej: Full trust: las aplicaciones pueden usar todos los recursos (sujeto a las restricciones de SO) Low trust: acceso limitado, acceso a archivos de solo-lectura desde el directorio de la aplicación, conectividad de red limitada, etc.
Configuración - Trust <location path="site1/application1" allowoverride="false"> <system.web> <trust level="High" originUrl="http://www.foo.com"/> </system.web> </location>
Seguridad en WebServices Pasando Usuario y Clave en el método Generando una clave de sesión Autenticando por windows SoapHeaders
Recursos - Seguridad Nota: http://www.microsoft.com/spain/msdn/articulos/archivo/261001/voices/authaspdotnet.asp Cambios en la Versión 1 de Seguridad: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/v1securitychanges.asp Seguridad .NET en MSDN: http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28001369
Preguntas ?
Muchas Gracias Por su participación !! Daniel Laco danielL@vemn.com.ar