Archivo de la etiqueta: asp.net

Autorización de urls en ASP.NET

La autorización de ASP.NET permite controlar el acceso a los recursos por parte de un usuario autenticado. Es decir podemos establecer si un usuario o grupo de usuarios tendrá posibilidad de acceder a una url en concreto.

Para ello se pueden establecer por cada directorio o archivo los permisos necesarios para acceder a él.

Todos sabemos que se pueden establecer reglas de reescritura mediante un web.config. A mi parecer la autorización de urls en asp.net está mal llamado por Microsoft porque lo que en realidad se controla es el acceso a un fichero o directorio determinado (es decir un recurso físico, no urls como tal).

Para establecer permisos en un sitio web se utilizarán los ficheros de configuración web.config. A continuación vamos a introducir algunos ejemplos que indican el funcionamiento de la autorización de urls en ASP.NET.

  • Denegar usuarios anónimos a toda la web. En el web.config del sitio:

<system.web>

...
	<authorization>
		<deny users="?"/> //acceso denegado a usuarios anónimos
	</authorization>

</system.web> 

  • Acceso denegado a usuarios anónimos pero posibilidad de acceso de uno a una página determinada

...

<configuration>

	<system.web>
	
		<authorization> 
			<deny users="?"/>  //restringir usuarios anónimos
		</authorization>
		
	</system.web>

	<location path="registro.aspx"> //página a la que se aplicarán las siguientes configuraciones

		<system.web>

			<authorization>
				<allow users="*"/> // esto permitirá el acceso a cualquier usuario anónimo
			</authorization>

		</system.web>

	</location>

</configuration> 

  • Dar permiso a un usuario en concreto y denegar a todos los demás:

<location path="usuario_con_privilegios.aspx">

    <system.web>

        <authorization>

			<allow users="premium"/> // acceso permitido a usuario_premium
			<deny users="*"/>  // acceso denegado a todos los demás

        </authorization>

    </system.web>

</location>

 


  • Permitir a usuarios con un determinado rol

<location path="DirectorioAdmin">

    <system.web>
		<authorization>

			<allow roles="Admin"/> //Acceso permitido para usuarios con rol Admin
			<deny users="*"/> // Acceso denegado a todos los demás

		</authorization>
    </system.web>

</location>

<location path="CustomerFolder">

    <system.web>
		<authorization>

			<allow roles="Admin, Clientes"/> //Acceso permitido a usuarios con roles admin o clientes
			<deny users="*"/> // Acceso denegado a todos los demás

		</authorization>
    </system.web>

</location>

  • Es posible también establecer reglas en un web.config por cada directorio. Es decir tener un fichero web.config para cada directorio.

<configuration>

    <system.web>

        <authorization>
			<allow roles="Admin"/> //Acceso permitido a usuarios con el rol Admin
			<deny users="*"/> // prohibir acceso a todos los demás
        </authorization>

    </system.web>

</configuration> 

Reglas

Hay que tener en cuenta de cómo se aplican las reglas:

  • Las reglas contenidas en archivos de configuración en la aplicación tienen prioridad sobre las reglas heredadas. El sistema determina la regla que tiene prioridad creando una lista combinada de todas las reglas de una dirección URL, con las reglas más recientes (más arriba en la jerarquía) al principio de la lista.
  • Dado un conjunto de reglas combinadas para una aplicación, ASP.NET comienza al principio de la lista y comprueba las reglas hasta que encuentra la primera coincidencia <allow users=»*»/> que autoriza a todos los usuarios. (Esta regla se aplica en último lugar de forma predeterminada.) Si no coincide ninguna otra regla de autorización, se permite la solicitud. Si se encuentra una coincidencia y ésta es un elemento deny, la solicitud se devuelve con el código de estado 401 HTTP. Si coincide un elemento allow, el módulo permite que se siga procesando la solicitud.

Autenticación en ASP.NET con IIS

Autenticación es el acto de validar la identidad de un cliente. Una vez autenticado un cliente podemos controlar el acceso de este cliente a los recursos. Para autenticarse, el cliente debe establecer unas credenciales (usuario y contraseña) que indique unívocamente quien es.

En ASP.NET existen estos tipos de autenticaciones:

  • Autenticación Windows, utiliza servicios propios del sistema operativo, de usuarios del sistema o incluso de red (directorio activo).
  • Autenticación basada en formularios, a través de un formulario de acceso se gestiona el inicio de sesión y la autenticación de un cliente. Es uno de los métodos de autenticación más comunes ya que para aplicaciones que requieran de autenticación en Internet no es lógico utilizar la autenticación Windows.
  • Passport, sirve para utilizar un único inicio de sesión en varios dominios. Es decir es parecido a lo que utiliza Google para todos sus servicios, cuando estas autenticado en un servicio puedes acceder a otro sin tener que dar tus credenciales de nuevo.
Autenticación Windows

Dentro de la autenticación Windows a su vez se encuentran estos subtipos:

  • Anónima, no se le pide directamente al cliente ningún tipo de credenciales.
  • Básica, el navegador solicita al cliente el usuario y contraseña. De manera predeterminada la cuenta enviada debe tener privilegios de inicio de sesión en el servidor web. Es decir es como si nos autenticaramos directamente en el servidor web. Este método de autenticación no es muy seguro ya que se envía mediante http y el método de codificación de la información es relativamente fácil revertirlo.
  • Implícita, es similar a la autenticación básica pero el algoritmo que codifica la información por http es más seguro. Mientras que la autenticación básica utiliza Base64 la autenticación implícita utiliza un digest o hash que es mucho más segura.
  • Autenticación de Windows Integrada, la autenticación de Windows integrada es la mejor opción cuando se utiliza una aplicación web de intranet donde los usuarios tienen cuentas de dominio de Windows. En estos casos la autenticación se realiza automáticamente sin que el cliente tenga que introducir sus credenciales.
  • Autenticación mediante certificados de cliente, un certificado es una instrucción que contiene información sobre una entidad y su clave pública en un grupo. Los certificados pueden contener aparte otros datos. 

Últimas tecnologías Web

Muchas tecnologías avanzan vertiginosamente hacia un futuro que seguramente no podamos ni imaginar. Este mismo futuro no nos permite ni un solo descanso y nos obliga a seguir aprendiendo. En el área del desarrollo y programación web pasa lo mismo.

Cada cierto tiempo los lenguajes de programación como ASP.Net, PHP, silverlight, etc. realizan cambios y mejoras en su framework aumentando, refinando y adaptando su funcionalidad y, al mismo tiempo, dejando poco a poco obsoletas versiones anteriores.

Por eso es recomendable utilizar las últimas tecnologías al servicio de los clientes. Tecnologías Web:

  • Web 2.0 – jQuery, XHTML, HTML5, AJAX
  • PHP 5.x
  • .Net 4.0 y .Net 4.5 – ASP.Net, Silverlight, Web Services, WCF, Entity Framework
  • CMS – Joomla! 2.5, joomla! 3.0, Drupal 7, WordPress 3.x
  • Datos y SGDB – SqlServer, Oracle, MySql, Pervasive, ODBC, XML, csv…
  • Servidores Web – IIS 6, IIS 7 y Apache.

Si lo prefiere para posibles mantenimientos de antiguos sitios web también tengo amplia experiencia en las versiones anteriores de PHP, ASP Clásico, ASP.Net (1.0, 2.0, 3.0 y 3.5) y joomla 1.6

No se puede cargar el archivo o ensamblado System.Web.Extensions

Error al compilar: No se puede cargar el archivo o ensamblado System.Web.Extensions Version=1.0.61025.0, Culture=neutral… El sistema no puede encontrar el archivo especificado.

Error system.web.extensions

La causa de este error es que no se puede encontrar la referencia al ensamblado indicado. Es muy posible que el equipo o servidor no tenga instalado ASP.NET AJAX 1.0.

Una vez instalado, las librerías quedarán directamente registradas en la GAC con lo que la siguiente compilación del proyecto dejará de existir el problema.

Para la instalación de ASP.NET AJAX 1.0 es necesario tener instalado:

Handler axd funciona correctamente en local pero no funciona en el servidor

Tengo una librería MSCaptcha que funciona correctamente en local pero al subir al servidor no funciona correctamente.

El problema surge de que IIS7 introdujo dos condiciones previas denominadas «integratedMode» y «classicMode«. Un handler que tiene una precondition «integratedMode« asociado a él sólo se puede cargar en un grupo de aplicaciones que tiene el «integratedMode« establecido en el conjunto de propiedades en la ApplicationPool. Handlers con la precondition «classicMode« sólo se cargarán en Grupos de aplicaciones que tienen la propiedad integratedMode establecida en falso.

En mi servidor local el pool de aplicaciones está en modo integrado con lo que la librería MSCaptcha funciona correctament pero en el servidor de producción está en modo clásico.

Para solucionarlo sin tener que cambiar configuraciones de servidor se puede establecer en el web.config una directiva para que el handler cargue con la configuración que decidamos.

En mi caso particular será:


<add name="MSCaptcha" verb="GET" path="CaptchaImage.axd" type="MSCaptcha.CaptchaImageHandler, MSCaptcha" preCondition="integratedMode"/>

De está forma he logrado que mi captcha se visualiza en el servidor.