17 oct 2010

IIS 7 y las delegaciones - Parte II

En la entrega anterior había explicado cómo solucionar un error relacionado con la autenticación.
Ahora veremos una nueva cuestión relacionada con la autorización.
Hosteando un sitio web VS2010 en IIS 7 me producía el siguiente error:

El error acusa que "falta definir una sección". Pero...dónde? Veamos el esquema general de archivos de configuración en el IIS7.



En la imágen anterior se ve claramente el rol que juegan los diferentes archivos de configuración, por un lado tenemos los del framework (web.config y machine.config) y por otro lado los del server (applicationHost.config). Entre los 3 se "mezclan" o bien dicho de otra forma, se toman las características que herederá nuestra web.config a nivel de aplicación (imágen resultante de la derecha). Los tags del framework estarán dentro de la sección <system.web> mientras que los del server dentro de <system.webServer>. Como siempre recomiendo visitar la web del IIS7.
Bueno, ahora volvamos al error en cuestión.
El mismo nos dice que hay una entrada "faltante" dentro de <system.webServer>, como bien observamos en el esquema se trata de una configuración del servidor. Seguimos estos pasos:
  1. Abrir el archivo applicationHost.config (%windir%\inetsrv\config).
  2. Ubicar la entrada en cuestion y la subentrada <sectionGroup name="security">
  3. Agregamos la siguiente línea:

    <section name="authorization" overrideModeDefault="Allow" />


  4. Y se le indica, tal como vimos en la entrega anterior, el atributo overrideModeDefault en "Allow", para que nuestro Web.Config lo pueda pisar.
  5. Grabamos el archivo.
  6. Abrimos el archivo Web.Config de nuestra aplicación y agregamos estas líneas:

    <security>
    <authorization>
    <add users="*" accesType="Allow"/>
    </authorization>
    </security>
  7. En este caso no restringimos el acceso a algún usuario o rol en particular.
  8. Corremos la aplicación nuevamente.
Espero les haya sido útil.
Saludos,
Mike

16 oct 2010

IIS 7 y las delegaciones - Parte I

Voy a iniciar este tema motivado por las pruebas que estoy realizando con VS2010 y en particular la publicación de un servicio WCF. El problema radicaba en el momento de la publicación del mismo, hosteado en IIS 7. Al momento de acceder al mismo de la siguiente forma:

http://localhost/wcf/cryptohashservice/service.svc

Me aparecía un mensaje de error similar al siguiente:

Y aquí comienza el tema de la entrada: Delegaciones en IIS 7.
No voy a ser extenso con el tema ni muchos menos, ya que en el sitio oficinal del IIS encontrarán excelente documentación al respecto. Voy a ir directo al grano, lo que implica entender qué está pasando y darle solución a nuestro error.
Lo que nos dice el browser es que hay otro archivo que nos está definiendo un "nivel de lockeo". El archivo en cuestion es: applicationHost.config. Lo pueden encontrar en %windir%\System32\inetsrv\config. (Es importante que cuando editemos este archivo lo hagamos con permiso de administrador).
Lo que tenemos que hacer ahora es lo siguiente:
  1. Abrimos el archivo web.config de nuestra aplicación.
  2. Dentro de la sección <system.webserver> (que está dentro de <configuration> )
    agregamos lo siguiente

    <security>
    <authentication>
    <anonymousAuthentication enabled="true" userName="/>
    </authentication>
    </security>


    Lo único que hicimos fue establecer el modo "anónimo" de autenticación.
  3. Ahora, lo que debemos hacer es permitir que se pueda "pisar" esta configuración, y debemos hacerlo a un nivel superior, y aquí entra en acción nuestro archivo applicationHost.config.
  4. Nos paramos al final de archivo, justo antes del cierre del tag y agregamos lo siguiente:


    <location path="WCF" overrrideMode="Allow">
    <system.WebServer>
    <security>
    <authentication>
    <anonymousAuthentication />
    </authentication>
    </security>
    </system.WebServer>
    </location>


    Si observamos no es más que un simple tag con un atributo overrideMode en "Allow", con esto decimos que cualquier archivo de configuración que esté en un nivel inferior (ya veremos luego como se consideran estos niveles al correr una aplicación) pueda pisar esta configuración.
  5. Además observemos que el tag tiene un atributo path, este es el path de la aplicación hosteada en el IIS7.
  6. Lo único que nos queda es tratar de browsear nuevamente el servicio.


    Espero que les haya sido útil.
Saludos,
Milke