En la búsqueda de un IAM (Identity Access Management) para autenticar usuarios que nos permitiera cubrir las necesidades de nuestro actual proyecto, una de las pruebas de concepto que hicimos fue la integración de Azure AD con nuestra aplicación.

Azure AD B2C es la variante del Directorio Activo de Azure orientada al consumidor final (BusinessToCustomers). Esta herramienta permite SSO (Single-Sign-On) y MultiFactor Authentication, además de autenticadores como FIDO2. Permite el login con email y redes sociales, así como la integración de nuestra aplicación con sus APIs, tanto para realizar la Autenticación como la Autorización. También, usa OpenId Connect como protocolo AuthN/AuthZ.

Hoy vamos a aprender a configurar Azure AD B2C y usar su API para crear usuarios.

Configuración de un nuevo directorio

Lo primero que tenemos que hacer es crear un directorio en el portal de Azure. Pinchamos en crear recurso (crucecita verde a la izquierda del panel arriba del todo) y buscamos un recurso del tipo Azure Active Directory B2C:

Crear directorio

Al pinchar en crear nos lleva a la siguiente pantalla, donde tenemos que clicar en la opción Crear un nuevo inquilino de Azure AD B2C:

Crear un nuevo inquilino de Azure AD B2C.

En el siguiente formulario elegimos el nombre de la organización y el país/región. La parte importante sería el Nombre de dominio inicial que debe ser una cadena alfanumérica (no permite guiones ni puntos). Este dominio es el que luego usaremos tanto para acceder al directorio de Azure como para las llamadas vía API.

Nombre de dominio inicial

Pinchamos en el botón de Crear. El directorio tardará menos de un minuto en crearse. Una vez creado, accedemos al nuevo directorio por el siguiente enlace:

Crear inquilino

Configuración de nueva aplicación para realizar operaciones con API

Para la realización de operaciones sobre los usuarios con nuestra aplicación es necesario integrarnos con las APIs de Azure. Para poder utilizar estas APIs es necesario crear una aplicación que tenga permisos para realizar estas operaciones.
En el panel de la izquierda marcamos en Azure Active Directory -> Registro de Aplicaciones -> Nuevo registro de aplicaciones.

Elegimos el nombre de la aplicación y el tipo (debe ser Aplicación Web o API). En URL de inicio de sesión podemos poner cualquier url, no es importante en este momento.
Una vez creada la aplicación, en el apartado de claves creamos una contraseña de la siguiente manera:

Es necesario generar estas claves para incluirlas en la llamada para obtener el token (que veremos más adelante).

Rellenamos el nombre del secreto y el valor y damos a guardar. En ese momento, se nos generará una clave en el campo valor que tenemos que guardar. Si salimos de esa pantalla sin guardarnos la clave, la perderemos.

Valor de las claves

Configuración permisos para API Windows Azure AD

Para poder realizar operaciones con las APIs de usuario de Azure, es necesario dar permisos a nuestra aplicación postman.

Debemos marcar la opción Read and write directory data, guardar y, luego, conceder permisos.

APIs para operaciones de usuario

Las APIs de Microsoft Graph que hemos utilizado con éxito han sido las de Windows Azure Active Directory, que nos permiten la creación de usuarios.

Para las operaciones con las APIs de usuario de Azure vamos a usar las siguientes:

Obtención de un token

Para poder crear usuarios, necesitamos un token de nuestra aplicación “postman”. Para eso hacemos la siguiente petición:

Como vemos, señalado en rojo está el dominio del directorio que creamos al comienzo del todo y en el que estamos trabajando.

El grant_type es client_credentials ya que es un 2-legged-token.

El resource debe ser https://graph.windows.net, que se corresponde al recurso de Azure sobre el que hemos dado permisos de lectura y escritura (API Windows Azure Active Directory).

El client_id se corresponde con el application_id de la aplicación postman creada:

El client_secret es el secreto que nos generó Azure al guardar la contraseña y que tenemos que haber guardado en nuestro equipo en ese momento.

Si realizamos la petición deberíamos obtener el token.

El token se puede abrir con alguna utilidad JWT Decoder y ver que tiene los permisos de read and write directory data.

Permisos de read and write directory data.

Este token lo usaremos para las siguientes llamadas.

Creación de un usuario

Para crear un usuario, la llamada será la siguiente:

Como vemos, estamos llamando al domino https://graph.windows.net, dominio que pusimos en el resource al obtener el token. Lo que sigue al dominio es nuestro directorio creado: paradigmadigitalglobalid.onmicrosoft.com.

Y en la cabecera Authorization añadimos el token que recibimos en la llamada de obtener el token.

En el body:

Body

Si todo ha ido correctamente recibiremos un 201 con un JSON del usuario creado. Esta es la documentación de esta API.

Obtención de los usuarios

Para obtener la lista de usuarios la llamada es muy parecida pero con un GET.

Obtención de los usuarios

Si queremos filtrar por usuario, por ejemplo por el objectId, sería:

Aquí puedes ver la documentación de obtención de usuarios.

Creación de un flujo de usuario

Si queremos utilizar el proceso de login que nos ofrece Azure AD B2C sin necesidad de picarnos todo el proceso de autenticación con oAuth2, hay que crear un flujo de usuario para el login y registro.

En la barra de búsqueda, arriba del todo, ponemos Azure AD B2C y pinchamos, entonces veremos la siguiente pantalla. Clicamos en Flujos de usuario (directivas).

Flujos de usuarios (directivas)

Acto seguido, marcamos la opción de Registrarse e Iniciar sesión. Creamos el flujo con los siguientes datos:

Por un lado está el nombre del flujo. Debemos, también, asociar un proveedor de identidad (en este caso Email Signup). Y en atributos pondremos Nombre, Apellido y Dirección de correo electrónico.

Creación de aplicación para el flujo de login

Nos vamos a la parte de Aplicaciones y creamos una nueva aplicación (necesaria para el proceso de login).

Creamos nueva aplicación

La URL de respuesta es donde redireccionará Azure una vez autenticado el usuario.

Prueba de Login en Azure

Para realizar un login nos vamos al flujo y cogemos la URL siguiente:

Login en Azure

Una vez se accede por ese enlace aparece el login de Azure, con el que ya deberíamos poder logarnos.

Login para acceder

Al autenticarnos, nos llevará a la URL de redirección que pusimos y nos devolverá un token que contiene información para identificar al usuario, si así lo hemos configurado.

Si abrimos el token JWT con el JWT Decoder:

JWT Decoder

Vemos que el token nos devuelve el username/email con el que hemos hecho el login. Esto nos sirve para identificar el usuario logado en nuestra página de redirección. Incluso, podríamos añadir más campos a este token configurándolos en Azure como Notificaciones de Devolución al crear el flujo de usuario y, también, podríamos crear campos customizables.

Conclusiones

Con esta configuración y la integración de estas APIs, hemos conseguido que una aplicación delegue la autenticación en Azure AD B2C y, además, le hemos proporcionado funcionalidad para crear usuarios y obtenerlos a través de sus APIs.

Ciertamente, la configuración en el portal de Azure es algo costosa, pues tenemos que crear una aplicación que pueda consumir las APIs. Y, por otro lado, hay que tener muy claro todas las opciones que nos ofrece la herramienta, que no son pocas.

Al tener el protocolo OIDC se puede realizar el oAuth2 de forma bastante sencilla, sin tener que incluir código en nuestro back como ocurre con el SAML.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.