Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Saad Ladki
Introducción
La autorización era difícil en versiones anteriores de IIS. Dado que IIS solo funcionaba con identidades de Windows, tenía que ir al sistema de archivos y establecer listas de control de acceso en archivos y directorios. Esta situación fue muy tediosa porque la interfaz de usuario de ACL es compleja y las reglas de autorización no se copian muy bien de la máquina a la máquina.
IIS 7.0 y las versiones posteriores usan la autorización de direcciones URL. Permite colocar reglas de autorización en la dirección URL real en lugar del recurso del sistema de archivos subyacente. Además, la configuración de autorización de la dirección URL de IIS se almacena en archivos web.config: puede distribuir reglas de autorización con el contenido de la aplicación. En el siguiente tutorial se presenta la característica de autorización de direcciones URL de IIS en Windows Server® 2008 Beta 3 y Windows Vista Service Pack 1.
Requisitos previos
Este tutorial requiere instalar las siguientes funciones de IIS anteriores además de la instalación predeterminada:
- "ASP.NET" en "Internet Information Services" – "World Wide Web Services" – "Características de desarrollo de aplicaciones"
- "Autorización de dirección URL" en "Internet Information Services" –" World Wide Web Services" – "Seguridad"
Escenario
Vamos a imaginar que tiene un directorio seguro al que solo puede acceder Alice, Bob y el grupo administradores. Dentro de ese directorio tenemos un archivo denominado bobsSecret.aspx al que se supone que solo tiene acceso Bob.
Configuración del escenario
Para este escenario necesitamos tres usuarios: Alice, Bob y Fred. También necesitamos un nuevo grupo llamado BobAndFriends en el que Alice y Bob son miembros. Cree las tres cuentas y el grupo a través del Administrador de usuarios de Windows o iniciando un símbolo del sistema con privilegios elevados y escriba los siguientes comandos.
net user Alice <password_of_your_choice> /add
net user Bob <password_of_your_choice> /add
net user Fred <password_of_your_choice> /add
net localgroup BobAndFriends /add
net localgroup BobAndFriends Alice /add
net localgroup BobAndFriends Bob /add
Abra el Explorador y vaya al directorio
%systemdrive%\inetpub\wwwroot.Cree un directorio denominado "secure".
Cambie al directorio "secure" y cree un archivo denominado "default.aspx". Puede realizar esta acción con el Bloc de notas o cualquier otro editor de texto.
Pegue el código siguiente en la página default.aspx:
<%@Language="C#"%> <% string currentUser = Request.ServerVariables["LOGON_USER"]; if (currentUser == "") currentUser = "anonymous"; Response.Write("<b>Current User:</b> " + currentUser); %>Cree otro archivo llamado bobsSecret.aspx y péguele el código siguiente:
<%@Language="C#"%> <% string currentUser = Request.ServerVariables["LOGON_USER"]; if (currentUser == "") currentUser = "anonymous"; Response.Write("<b>Current User:</b> " + currentUser); Response.Write(" <b>My secret:</b> I used Apache before I discovered IIS7.</b> "); %>Ahora, vea si las dos páginas web funcionan solicitando
http://localhost/secure/yhttp://localhost/secure/bobsSecret.aspx.
Configuración de la autenticación
La autenticación responde a la pregunta de quién quiere tener acceso. La autorización responde a si la persona autenticada obtiene realmente acceso. Por lo tanto, antes de experimentar con la autorización de dirección URL, debemos habilitar la autenticación, ya que si no sabemos "quién" quiere tener acceso, no podemos responder a si puede obtenerlo o no.
Inicie INETMGR escribiendo INETMGR en el menú "Iniciar búsqueda".
Abra el nodo de máquina en la vista de árbol izquierda y, a continuación, abra el nodo "Sitio web predeterminado" y seleccione el directorio "secure".
Haga doble clic en "Autenticación".
Deshabilite "Autenticación anónima" y habilite "Autenticación básica".
Ahora solicite
http://localhost/secureyhttp://localhost/secure/bobsSecret.aspxde nuevo. Se le pedirán credenciales. Escriba "Alice" como nombre de usuario y su contraseña. Se le autenticará como "Alice".Nota:
Si usa Internet Explorer, puede presionar Ctrl+F5 para que el explorador actualice la versión almacenada en caché de la página de ASP.NET.
Configuración de la autorización de dirección URL
Ahora proteja las dos páginas para que solo Alice y Bob tengan acceso:
Haga doble clic en el directorio web "secure" de nuevo y seleccione "Reglas de autorización".
Quite la regla "Permitir todos los usuarios".
Haga clic en "Agregar regla de permiso" y seleccione el botón de radio "Roles especificados o grupos de usuarios:"; agregue "BobAndFriends" y haga clic en el botón "Aceptar".

Cierre todas las ventanas de Internet Explorer porque el explorador almacena en caché las credenciales que escribió en el paso anterior.
Abra Internet Explorer e intente acceder a la página con las credenciales de Fred. No obtendrá acceso.
Ahora pruebe con las credenciales de Bob o las de Alice. Obtendrá acceso.
Configuración de la autorización de dirección URL para una sola página web
Ahora seguimos teniendo el problema de que Alice todavía puede acceder a BobsSecret.aspx. Este es el modo de corregirlo:
Haga doble clic en el directorio web "Secure" de nuevo y seleccione "Vista de contenido" en la parte inferior de la página.
Verá una lista de archivos en la carpeta segura, es decir, "default.aspx" y "bobsSecret.aspx".
Haga clic con el botón derecho en bobsSecret.aspx y seleccione "Vista de características"

Ahora solo va a realizar cambios para la página bobsSecret.aspx, tal como se indica en la barra de estado.
Vuelva a seleccionar "Reglas de autorización". Verá que la configuración heredada, es decir, el grupo BobsAndFriends tiene permiso para acceder a bobsSecret.aspx.
Quite la regla "BobsAndFriends".
Ahora haga clic en "Agregar regla de permiso..."
Haga clic en el botón de radio "Usuarios especificados:", escriba "Bob" y haga clic en "Aceptar".

Cierre todas las ventanas de Internet Explorer y solicite
http://localhost/secure/bobsSecret.aspx.Solo al escribir las credenciales de Bob obtendrá acceso.
Temas avanzados de la autorización de direcciones URL
En los párrafos siguientes, se muestran algunos temas avanzados de la autorización de direcciones URL.
Configuración
No es necesario usar la interfaz de usuario para especificar la configuración de la autorización de direcciones URL. Puede especificar las reglas de la autorización de direcciones URL directamente en el archivo web.config. La sección de configuración de <autorización> de IIS se delega de forma predeterminada: puede distribuir reglas de autorización junto con el contenido web. A continuación, vea cómo se ve el archivo %systemdrive%\inetpub\wwwroot\secure\web.config después de seguir este tutorial:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="BobAndFriends" />
</authorization>
</security>
</system.webServer>
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="BobAndFriends" verbs="" />
<add accessType="Allow" users="Bob" />
</authorization>
</security>
</system.webServer>
</location>
</configuration>
Diferencias entre la autorización de direcciones URL de ASP.NET y la autorización de direcciones URL de IIS
Hay pequeñas pero importantes diferencias entre ASP.NET UrlAuthorization y la autorización de direcciones URL de IIS. Ambos módulos se pueden instalar a través del programa de instalación de IIS. La autorización de dirección URL de IIS se instala al instalar la característica "Autorización de URL" en la interfaz de usuario del programa de instalación de IIS:

La autorización de URL de ASP.NET se instala al instalar ASP.NET en IIS. Si domina ASP.NET, recordará que ASP.NET UrlAuthorization se implementa en el módulo System.Web.Security.UrlAuthorizationModule. La sección de configuración correspondiente es system.web/authorization. Esta es la entrada de configuración.
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
El módulo de autorización de direcciones URL de IIS se implementa en el módulo global urlauthz.dll.
<add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" />
Es importante tener en cuenta que la condición previa managedHandler está en el módulo urlAuthorization de ASP.NET. La condición previa indica que el módulo de autorización de direcciones URL solo se invoca cuando el código que controla la solicitud se asigna al código administrado, normalmente una página .aspx o .asmx. La autorización de direcciones URL de IIS, por otro lado, se aplica a todo el contenido. Puede quitar la condición previa managedHandler del módulo de autorización de direcciones URL de ASP.NET. Está ahí para evitar una penalización de rendimiento que deberá pagar cuando todas las solicitudes (por ejemplo, una solicitud para .html o .jpg páginas) tengan que pasar por el código administrado.
Evaluación de reglas
También hay diferencias en el orden en que IIS y los dos módulos de autorización de direcciones URL evalúan las reglas de autorización. La autorización de direcciones URL de ASP.NET está centrada en el desarrollador y los desarrolladores tienen control total sobre qué reglas establecen. La autorización de dirección URL de IIS mantiene al administrador en mente e intenta asegurarse de que los desarrolladores no pueden invalidar las reglas que establezca un administrador.
Un ejemplo
Supongamos que el administrador quiere asegurarse de que todos los usuarios de un sitio determinado deban autenticarse. Para ello, deberá establecer la siguiente configuración en la raíz del sitio:
<authorization lockElements="clear">
<add accessType="Deny" users="?" />
</authorization>
Esta configuración deniega el acceso a usuarios anónimos (? = usuarios anónimos, * = todos los usuarios). Con lockElements="clear", asegúrese de que nadie de un nivel inferior pueda borrar la herencia de esta configuración. La configuración se heredaría para todas las aplicaciones y directorios virtuales de este sitio. Se produce una infracción de bloqueo cuando intenta utilizar la declaración <clear/> en un nivel inferior.
Para obtener más información sobre el bloqueo de configuración, vea Procedimiento para bloquear la configuración de ASP.NET.
También puede bloquear el elemento clear en la autorización de direcciones URL de ASP.NET. El problema es que la autorización de direcciones URL de ASP.NET evalúa las reglas de autorización de abajo arriba, es decir, primero evalúa las reglas del archivo web.config actual antes de evaluar las reglas principales. Tan pronto como se encuentre una coincidencia, se concede o deniega el acceso. En el ejemplo anterior, todavía puede conceder acceso a usuarios anónimos especificando <add users="?"/> como regla de autorización en el archivo web.config seguro. Dado que se evalúa primero, a los usuarios anónimos se les concedería acceso.
En primer lugar, el módulo de autorización de direcciones URL de IIS evalúa las reglas de denegación. Dado que deniega el acceso a usuarios anónimos, no puede invalidar simplemente esa regla. La otra gran diferencia es que las reglas principales se evalúan primero. Esto significa que si deniega el acceso a Fred en un nivel superior, no podrá permitir el acceso a Fred en un nivel inferior.
Tabla de diferencias
| Diferencia | Comportamiento de autorización de direcciones URL de ASP.NET | Comportamiento de autorización de direcciones URL de IIS |
|---|---|---|
| Evaluación de reglas | Orden: a) Nivel inferior que primero va al elemento principal, b) Orden de apariencia en la colección de reglas | Orden: a) Las reglas de denegación se evalúan primero comenzando en el elemento principal b) Permite las reglas comenzando en el elemento principal. c) Orden de apariencia en la colección de reglas |
| Interfaz de usuario de IIS | Interfaz de usuario que no sea de IIS | Interfaz de usuario "Reglas de autorización" |
| Sección de configuración | system.web/authorization | system.webServer/security/authorization |
| Módulo | System.Web.Security.UrlAuthorization | %windir%\system32\inetsrv\urlauthz.dll |
| Contenido | Solo se aplica al contenido asignado a un controlador administrado (se puede desactivar a través de la condición previa managedHandler). | Se aplica a todo el contenido |
Uso de cuentas y grupos de dominio
Debe especificar cuentas de dominio y grupos mediante lo siguiente:
<domainname or username>\<user>
En este ejemplo se usa el nombre de máquina, suponiendo que nuestras cuentas se crearon en la máquina iis7test:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="iis7test\BobAndFriends" />
</authorization>
</security>
</system.webServer>
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="iis7test\BobAndFriends" verbs="" />
<add accessType="Allow" users="iis7test\Bob" />
</authorization>
</security>
</system.webServer>
</location>
</configuration>
Uso de identidades que no son de Windows
La autorización de direcciones URL no solo es para las identidades de Windows. También funciona bien para las que no son de Windows. Úsela junto con Suscripción y roles de ASP.NET, así como para las identidades personalizadas, en caso de que escriba su propio módulo de autenticación.
Resumen
La autorización de direcciones URL es una nueva forma eficaz de especificar reglas de autorización para las aplicaciones web. Ahora puede especificar reglas en XML sin utilizar más las listas de control de acceso de Windows.