Windows Azure Appfabric Access Control Service ACS (3/3)

 

Este es el tercer y último post de una serie relacionada con un evento que tuvimos con el Grupo de usuarios de Valencia, puedes encontrar el primero en Windows Azure AppFabric Access Control Service ACS (1/3) y el segundo en Windows Azure AppFabric Access Control Service (2/3)

 

En este post vamos a ver cómo personalizar la experiencia de login para los visitantes del sitio web y cómo gestionar los errores que puedan producirse durante la autenticación en el servicio de Access Control.

 

Personalizar la página de login

 

Al arrancar nuestra aplicación vemos que la página inicial a la que se accede no pertenece a nuestra aplicación, por defecto se está mostrando un formulario alojado en nuestro namespace de Access Control Service.

image

 

Si preferimos personalizar la experiencia de logIn (imagen, logos, apariencia corporativa…) es muy sencillo. Empezaremos por volver al portal de administración de nuestra suscripción de Windows Azure, en concreto a la configuración del namespace que hemos creado para servicio de Access Control. Hacemos click en Application Integration y exacto!! click en Login Pages

image

Dentro del apartado de login pages tendremos solo nuestra aplicación de ejemplo, hacemos click sobre ella y vemos que se nos presentan dos opciones.

Option 1 – Link to an ACS-hosted page. Básicamente, nos dan el enlace donde reside el formulario de login para que lo incorporemos en la parte que queramos de nuestra web. Cuando se haga click en ese enlace, el usuario será redirigido a la página que ya conocemos.

Option 2 – Host the login page as part of your application Esta es la opción que nos interesa, nos permite descargarnos una página de ejemplo que podremos editar y que se encarga de la parte de autenticación.

Nos descargamos la página de ejemplo, la situamos en el directorio de nuestra aplicación (la renombramos a algo más intuitivo, por ejemplo LoginPage) y nos aseguramos de incluirla en el Proyecto de Visual Studio (Add Existing Item)

 

image

 

Ahora está en nuestro poder, de modo que podemos editarla al gusto… en mi caso, me voy a conformar con cambiar un par de textos para que se vea que la página que se ejecuta es la que tengo en local, dejo los cambios de estilos y logos a los que sepan, o se atrevan con esas cosas 🙂

 

Una vez editada, tenemos que modificar un par de secciones en el web.config para estar listos. Primero la autorización, añadimos el bloque location relativo al LoginPage.html recién añadido

 

image

y segundo, el apartado microsoft.identitymodel/service/federatedAuthentication/wsFederation para que apunte a la página recién añadida al proyecto como issuer

image

¿Fácil verdad?

Ejecutamos la aplicación para verificar que no nos hemos confundido y ahora tenemos control sobre la página de login, como no he cambiado el diseño, simplemente resalto la URL O=)

image

 

 

Gestión de… ¿Errores?

 

Para finalizar, vamos a añadir una página para gestionar los posibles errores encontrados en el servicio de ACS. ¿Recordáis cuando dimos d e alta la aplicación en el primer post? Había un campo para registrar una URL en caso de error =)

Vamos al portal de administración de windows azure, entramos en app Fabric y entramos en la configuración del namespace que hemos dado de alta para el ejemplo de ACS.

En la sección de Relaying Party Applications, hacemos click sobre nuestra aplicación, buscamos en el formulario la entrada de Error URL y damos de alta una URL de nuestra aplicación apuntando a una página de error (que crearemos en el siguiente paso) y guardamos la modificación.

image

ACS le va a enviar a la página que hemos indicado un código de error y unos detalles sobre el mismo a través de la URL, la forma más fácil para capturarlo es crearnos un par de clases que encapsulen la información al serializarla:

public class ErrorDetails
{
     public string context { get; set; }
     public int httpReturnCode { get; set; }
     public string identityProvider { get; set; }
     public Error [ ] errors { get; set; }
}

public class Error
{
     public string errorCode { get; set; }
     public string errorMessage { get; set; }
}

Como supuestamente esta página sólo se va a llamar en caso de error, podemos directamente añadir el código para interceptar y deserializar el mensaje en el Page_Load. En el código estamos deserializando el mensaje a una estructura de clases ErrorDetails y Errors y concatenándolas para mostrarlas en una label que hemos añadido a la página (lblErrorMessage)

protected void Page_Load (object sender, EventArgs e)
{
   JavaScriptSerializer serializer = new JavaScriptSerializer();
   ErrorDetails errors = serializer.Deserialize<ErrorDetails>( Request["ErrorDetails"] );

   var messages = from e in errors.errors
   select string.Format("Error Code {0}: {1}", e.errorCode, e.errorMessage);

   lblErrorMessage.Text = string.Join("<br/>",messages.ToArray<string>());

}

 

Una vez tenemos la página, tenemos que modificar el web.config para permitir el acceso anónimo y que todo el mundo pueda acceder a ella. Porque, imaginad… si solo pudiesen entrar los usuarios autenticados… y es una página para mostrar los errores de autenticación… vamos listos, no? 😛

image

Ahora.. estamos listos para probar. Pero para que el servicio de Access Control devuelva un error, tiene que producirse un error dentro del mismo servicio, como por ejemplo… que no haya reglas con las que contrastar la autenticación una vez esta se produzca. De modo que la forma más rápida de probar si nuestro código funciona es ir al portal de Windows Azure y borrar las reglas de la aplicación de la configuración de Access Control.

Si lo hacemos…

image

Vemos como la página de intercepción se comporta de la forma que esperábamos 🙂

 

 

Conclusión

A lo largo de estos tres posts hemos experimentado lo sencillo que resulta externalizar la autenticación de la aplicación mediante el servicio de Access Control de AppFabric y cómo nos permite incorporar de forma sencilla otros proveedores, también hemos visto que podemos definir nuestras propias reglas, trabajar con los tokens que nos envía el servicio, e incluso personalizar la experiencia, espero que estos posts puedan resultar de ayuda a l@s que empiecen a trastear con Access Control. Sé que hay un par de libros en castellano cociéndose sobre el tema y en cuanto estén acabados editaré el post para agregarlos.

 

Por el momento, os dejo con este sitio web, que es el mejor repositorio de recursos que he encontrado sobre ACS

Access Control Service 2.0 – http://msdn.microsoft.com/en-us/library/gg429786.aspx

 

 

 

Happy Hacking!!

 

David Salgado ( @davidsb )

Publicado por

Un comentario en “Windows Azure Appfabric Access Control Service ACS (3/3)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *