Azure: Windows Azure Authentication Library

 

Como seguro que todos los que leéis mi blog sabréis, el manejo de la identidad es un tema que me apasiona y sobre el que ya he escrito mucho. De hecho, ahora mismo me encuentro en fase de preparación sobre un libro acerca del manejo de la identidad, que espero en poco tiempo esté a vuestra disposición de forma gratuita. Pues bien, desde hace un tiempo para aquí sobre este tema se ha avanzado mucho en plataforma Microsoft, tanto que a veces no damos ni seguido ciertos elementos, como por ejemplo era mi caso con AAL ( Azure Authentication Library), por eso, para intentar remediar este inconveniente, empezaré una serie de post acerca de este temática que nos permitan ver todo el trabajo que el equipo de Windows Azure está haciendo sobre esto, centrándonos especialmente en los siguientes puntos

  • Azure Authentication Library

AAL, es básicamente un paquete de NuGet que nos habilita un serie de ensamblados para realizar alguna de las siguientes tareas:

    • Gestión de tokens,generalmente server to server
    • Autenticación con Azure AD,Azure ACS  y ADFS 2.0 y otros proveedores
    • Validación de tokens

Como en casi todo lo que tenga que ver con la identidad y su gestión, una de las principales fuentes ( a mayores de lo que yo mismo pueda ir masticando y contando en este blog ) es el blog de Vittorio Bertoci, el cual recomiendo encarecidamente puesto que, tal y como acabo de decir, es siempre una de mis fuentes principales de información y aprendizaje.

  • Windows Azure Active Directory

El segundo de los temas que trataremos es Azure Active Directory junto con dos elementos fundamtales como Graph API y Web Single Sign-ON.

 

Con el fin de que esta entrada no se quede en una mera entrada informativa, no me parece muy adecuado, empezaremos por sentar las bases de AAL y desgranar algunos conceptos.

AAL

¿Que es AAL y para que sirve? Aunque, ya lo explicamos un poco en las líneas anterior hay una frase de Vittorio que creo que da una buena explicación de que es y para que no sirve esta nueva librería.”AAL viene a dar solución a algunas de las tareas que los desarrolladores necesitan para manejar la autenticación;asumiendo para ello que no tenemos un profundo conocimiento del protocolo en juego”. Para utilizar AAL solamente tenemos que instalar el paquete Windows Azure Authentication Library BETA gracias al cual incorporaremos a nuestro proyecto la librería Microsoft.WindowsAzure.ActiveDirectory.Authentication.dll cuyo contenido puede verse de forma resumida en la siguiente imagen.

 

 

 

 

5100_image_thumb_077C2CA7

 

 

 

Con el fin de empezar con un pequeño detalle que nos muestre alguna de sus características haremos un pequeño ejemplo en una aplicación de Windows Forms terriblemente sencilla, tanto que lo único que tendremos es un boton con el siguiente manejador.

           using (var context = new AuthenticationContext("https://identity45.accesscontrol.windows.net"))
           {
                var credentials = context.AcquireUserCredentialUsingUI("urn:geeksmsaalsample");
           }

 

Dónde “https://identity45.accesscontrol.windows.net” representa el namespace de nuestro servicio de Azure Access Control Service y “urn:geeksmsaalsample” es el realm de nuestra aplicación. Si simplemente con eso ejecutamos nuestra aplicación veremos como se nos mostrará una pequeña ventana que contendrá el siguiente mensaje de error:

 

1

 

Este mensaje de error se debe a la inexistencia en la configuración de nuestro namespace de access control service de un RP con este REALM. Para arreglarlo nos vamos a nuestra configuración de Azure y creamos un nuevo Relay Party, en nuestro ejemplo tan simple como se ve a continuación.

c4

 

 

Una vez creado, ahora si se nos presentarán los diferentes proveedores de identidad configurados en Azure ACS para esta nueva RP y nos podremos autenticar de esta forma tan sencilla utilizando distintos proveedores tal y como se ven en las siguientes imagenes. Aunque no lo hemos comentado, en el paso anterior hay que especificar las reglas de este RP, en nuestro ejemplo hemos puesto un passthrough de los proveedores de identidad configurados.

 

 

2

 

c3

 

Tal y como observá, el proceso que hemos hecho es idéntico al proceso de dar de alta Access Control Service para un proyecto web ahora en un cliente rico de una manera insultantemente sencilla. Es más, si observa en el tipo de resultado AssertionCredential este nos permite generar un token para ser utilizado en servicios OAuth o para enviar este token a nuestros servicios, por ejemplo web api,que después, podrán validar también utilizando este mismo paquete.

 

            using (var context = new AuthenticationContext("https://identity45.accesscontrol.windows.net"))
            {
                //authenticate and return credentials
                var credentials = context.AcquireUserCredentialUsingUI("urn:geeksmsaalsample");

                if (credentials != null) //the user is logged!
                {
                    //get token to use in com to server
                    var token = credentials.CreateAuthorizationHeader();
                }
            }

Bueno, aquí lo dejamos, si le ha gustado, no se preocupe porque pronto volveremos al ataque con más y esperemos que mejor…

 

Saludos

unai