Splash: Active Directory B2C

Con mi serie de artículos "Splash", planeo ahorrarles mucho tiempo de investigación online acerca de tecnologías Microsoft. Sobretodo aquellas relacionadas con Azure.

En esta ocasión, les estaré escribiendo de Azure Active Directory B2C (Business to Consumer).

image

Éste es un servicio que siempre me imaginé sería muy cool de existir: Poder delegar la repetitiva y no funcional tarea de manejo de usuarios (registro, login, passwords, perfiles, integración con redes sociales, etc.).

Azure hoy lo ofrece. Y dispone de toda la infraestructura y robustez que siempre ha caracterizado al Active Directory, ahora a disposición de aplicaciones o servicios dirigidos al consumidor; no solamente a usuarios corporativos como era costumbre.

Así que si estás desarrollando tu startup o tienes ya una aplicación SaaS que maneja múltiples usuarios, con ADB2C, tienes una opción.

En este caso, Azure te ofrece una base de datos propia para almacenar la información de tus usuarios. Ésta DB cuenta con la misma alta disponibilidad que es ofrecida a servicios como Outlook . Es una base de datos que está tan abstraída que difícilmente te darás cuenta de que existe. Tu solamente usarás el servicio para poder registrar tus usuarios y que ellos puedan luego hacer login, cambiar sus passwords, etc.

Es tan abstraído el servicio, que ya te ofrece interfaces web previamente creadas que son mostradas en tu aplicación cada vez que un usuario se va a registrar, loguear, editar su perfil, etc.

Así que lo único que hay que hacer, es configurar el servicio de ADB2C en tu suscripción de Azure, configurar la aplicación o servicio propio para usar ADB2C y comenzar a usarlo!

Se incluyen 50 autenticaciones al mes gratis. Y un millón cuestan la tercera parte de un centavo. O sea, es muy barato.

Aunque también se ofrece Multi-Factor Authentication sin que tengamos que desarrollar ni una línea de código. Así pues para un usuario que se loguee correctamente con usuario y password, también se podría emitir un SMS o una llamada telefónica en la cual se transmitiría un código, para que sea ingresado en el login y tener un acceso aún más seguro. Cada autenticación de este tipo sí vale 3 centavos de dólar.

Hace casi un año intenté usar ésta tecnología, pero aún estaba muy incipiente. Por ejemplo, en ese entonces no estaba disponible para aplicaciones de escritorio. Hoy en día, sí que lo está. También está disponibles para aplicaciones móviles y de hecho está hasta para sitios web asp.net core.

No todo es color de rosa… aún

Image result for active directory b2c logo

Así que decidí darle otra oportunidad, precisamente con un sitio web asp.net core. Luego de estudiar bastante (no es una tecnología muy directa de usar; hay que entender varios conceptos con una curva un poco más alta que la del promedio de servicios de Azure) llegué a hacer funcionar mi sitio con la ayuda de este servicio.

De hecho el servicio ofrece una buena API para hacer operaciones en Batch, por ejemplo para hacer una migración desde un sistema de manejo de usuarios anterior, o para ingresar un conjunto de nuevos usuarios con una sola operación.

Sin embargo, aunque la prueba concepto estuvo adecuada y funcionó bien, el ir a producción con ADB2C me presentó varios inconvenientes insalvables por ahora, pues dependen de funcionalidades que aún no están en el servicio pero que claramente están en el roadmap. Yo le calcularía unos 6 meses más para salir (no es un compromiso de ninguna manera):

  1. Páginas personalizadas: Como lo mencioné ADB2C ofrece interfaces de usuario prefabricadas para que los usuarios se registren, hagan login, actualicen sus permisos, etc. Éstas interfaces son muy parecidas a las que aparecen cada vez que te vas a loguear en un servicio de Microsoft como Outlook, Onedrive, etc.

    Pero a veces, los requerimientos del negocio exigen que el look and feel permanezca uniforme durante toda la aplicación. Así que sería ideal que los desarrolladores pudiesen ofrecer sus propias plantillas para el manejo de cuentas de usuarios.

    Aquí aunque se ha avanzado y algunas experiencias se pueden personalizar (por ejemplo la de registro), otras como el sign in no permiten que usemos nuestras propias páginas para el login, por lo que quedamos limitados a la experiencia que se ofrece por defecto, aún cuando en ésta se pueden cambiar logos, imágenes y colores. Pero siempre bajo la misma apariencia en general.

    Este es un punto muy importante en el que el equipo está trabajando, para que podamos personalizar cada experiencia de usuarios en nuestras aplicaciones. Pero por ahora no es posible.

  2. Localización: Esta falencia fue la que definitivamente me frenó. Ya que las experiencias de usuario vienen solo en inglés y no es posible cambiarlas. Así que por ejemplo donde se pide el correo electrónico aparece: Email Address y si se te olvidó el password aparece: Forgot your Password? Y cosas por el estilo.

  3. Falta de acceso a datos de Redes Sociales: A pesar de que un usuario se puede loguear por ejemplo con su cuenta de Facebook a través de OAuth 2.0 soportado por ADB2C, no se pueden extraer datos de su perfil ni acceder a otros permisos requeridos por Facebook. Solo se puede obtener el email. La implementación de éstas características también está en progreso.

  4. No veo un manejo de roles: Por tal motivo, éste asunto debería manejarse dentro de la aplicación. No es algo del otro mundo, pero por ejemplo la autenticación asp.net, tenía sus tablas de roles en la db.

Conclusiones

En conclusión podría mencionar que si necesitamos generar una aplicación o servicio que maneje usuario de una manera súper rápida donde no importa mucho el look and feel de las experiencias de usuario para login registro, emails de verificación, etc. Y tampoco que éstas experiencias estén en inglés, podríamos obtener mucho beneficio de ADB2C.

Pero para usos más reales en nuestra industria considero que debemos esperar un poco más. Aunque sea hasta poder tener las experiencias personalizadas para todos los casos y hacer una localización que se ajuste a los gustos de nuestros usuarios.

Sin duda una tecnología muy prometedora que en el cercano futuro estaré usando en mis proyectos para ser mucho más productivo.