Seguridad en ASP.NET – IIS 7 Modo integrado

IIS 7 es un sistema modular que permite instalar y desinstalar cada uno por separado para evitar ataques no deseados.

iis7

El modo integrado de IIS 7 es más completo que IIS 6 y tiene completamente integrada en si la seguridad de ASP.NET. De modo que la configuración que realices de seguridad en ASP.NET será aplicable a cualquier petición sea cual sea el tipo de archivo – puede aplicarse a páginas php, jsp o estáticas -. En toda petición IIS lo primero que comprueba es si la IP es la correcta – en un IIS puedes configurar tu aplicación web para que acepte una o algunas IP’s de destino concretas como también de origen -.

iis7_1

El siguiente paso es comprobar si se necesita autentificarse, pero esta vez existe la posibilidad de poder autentificar por formularios. Por tanto la primera de las diferencias que tienes para esta nueva versión es la inclusión de la autenticación por formularios en el propio IIS. En el caso de tener una aplicación web que necesite acceso anónimo, autenticación por Windows o autenticación por formularios puede ser comprobado por el mismo IIS.

iis7_2

Una vez realizada la autenticación – y por tanto en este punto ya tienes información de quien esta realizando la consulta – se comprueba la autorización que tienes en los recursos de la web por Url.

iis7_3

Por ultimo se pasa la petición al proceso ASP.NET.

iis7_4

Por tanto puedes comprobar como en IIS 7 modo integrado se da más responsabilidad al mismo IIS.

Cuando el IIS ha podido autentificar al usuario se pasa la solicitud al proceso ASP.NET para que se genera un objeto Principal que tiene en si un objeto Identity. Estos dos objetos son los usados en las aplicaciones web para tener información del usuario y de los roles que pertenece. Cuando en capítulos anteriores te he hablado de HttpContext te decía que era la clase donde encuentras todo lo que necesitas saber acerca de la petición. Context.User es donde se guarda la instancia IPrincipal – IPrincipal es la interfaz que después dependiendo del tipo de autenticación es un tipo u otro -. IPrincipal contienen el método IsInRole() para determinar si el usuario esta dentro de un rol o no. Identity tiene las propiedades Name que devuelve el nombre del usuario (username), IsAutheticated que devuelve un booleano para indicar si esta o no autentificado y AuthenticationType para saber el tipo de autenticación.

auth

Para más información puedes comprar mi libro Guia Práctica de Asp.net

Anuncis

Entity Framework Complex Type i ADO.NET Data Services

Dues tecnologies molt interessant en opinió meva i molt utils per un ràpid desenvolupament que et permeti poder crear serveis amb accés a bases de dades.

Entity Framework ens permet mapejar les bases de dades en entitats per tal de que podem aplicar LINQ per poder consultar els valors de la base de dades. També ens permet poder gestionar la base de dades sense entrar per res en llenguatge natiu de la base de dades.

Amb EF sovint trobem la necessitat de tenir Complex Types ja sigui perquè volem tenir una estructura auxiliar dins el nostre entorn o perquè important un Stored Procedure de la base de dades aquesta com a sortida té una estructura complexa.

ADO.NET Data Services ens permet poder crear serveis WCF simples que estan orientats a les dades i no pas als mètodes. Aquests serveis es configuren per un EF i per tant és en el client del servei que s’utilitza els contexte creat per poder accedir a les dades com si estiguessin en local.

Però de moment sembla ser que els Complex Types tenen un problema de compatibilitat i no es poden utilitzar per ADO.NET Data Services. Per tant qualsevol Stored Procedure o Web Method que poguem tenir dins el servei no actuarà correctament.

El problema és unicament al moment de serialitzar l’estructura i per tant una manera de solucionar-ho seria tu mateix recorrer a una serialització pròpia.

L’altre és crear un servei WCF normal que puguis consultar aquest tipus de informació.

És per això que ADO.NET Data Services està orientat a les dades i no pas als mètodes com si el servei WCF.

Per més informació:

The closed type does not have a corresponding element settable property

EF4: The closed type ‘xxxx’ does not have a corresponding element settable property

Issues with using Silverlight 4, WCF Data Service Service Operation with Entity Framework 4.0

Seguridad en ASP.NET – IIS6 o IIS 7 Classic Mode

Para entender la seguridad de ASP.NET es importante entender la seguridad del IIS. Internet Information Services es la primera puerta que llama toda petición y es la ultima puerta que cierra toda respuesta. Te hablaré de las versiones IIS 6 y IIS 7 porque existe un cambio importante entre estas dos versiones. Aunque no tendría que importarte demasiado IIS 6, porque ASP.NET 4 tecnológicamente esta en la misma época que IIS 7, en realidad tus aplicaciones web pueden correr en cualquiera de las dos versiones. También te diría que te explico las dos versiones porque el mismo IIS 7 puede correr de dos formas: modo clásico – que es el mismo modo del IIS 6 – y el modo integrado – que es el nuevo -.
Para pasar de un modo a otro debes indicarlo en el pool de aplicaciones que esta asociado a tu aplicación web.
iis
IIS 6 o IIS 7 modo clásico

Es una capa más en la seguridad de ASP.NET. En todas las peticiones ASP.NET IIS realiza unas simples comprobaciones y en el caso de ser correctas se pasa la petición al proceso ASP.NET que realizará las otras comprobaciones. De este modo la seguridad que nosotros configuraremos solo se aplicará a las peticiones ASP.NET. En toda petición IIS lo primero que comprueba es si la IP es la correcta – en un IIS puedes configurar tu aplicación web para que acepte una o algunas IP’s de destino concretas como también de origen -, después comprueba que tengas acceso de lectura (en el caso de ficheros estáticos) o permisos de ejecución (en el caso de ficheros dinámicos).


iis_1

El siguiente paso es comprobar si la petición necesita ser autentificada en modo Windows. En el caso de que tengas una aplicación web que necesite una autenticación por formularios tienes que dar acceso anónimo a toda la aplicación web. Si es el caso de tener una aplicación web que necesite una autenticación por Windows – seria el caso de tener una Intranet donde los usuarios se identifican mediante Active Directory – puedes indicar que el acceso esta restringido a estos usuarios.


iis_3

Por ultimo se pasa la petición al proceso ASP.NET.


iis_2

Para más información puedes comprar mi libro Guia Práctica de Asp.Net