Gestión de identidad online

Bajo este título tan sencillo se encuentra uno de los problemas más recurrentes de las aplicaciones web y servicios que se ofrecen en internet. Antes de comenzar con la materia en sí, un repaso histórico de porqué se ha llegado a este punto.

Créate una cuenta / inicia sesión

Si alguna vez ha navegado por algún sitio web que ofrezca características personalizadas para el usuario una de las frases más repetidas es esta: crear cuenta, iniciar sesión. Todos los sitios web querían que los usuarios se creasen una cuenta para poder acceder a todos los servicios que se ofrece. Normalmente el correo electrónico servía como mecanismo para identificar únicamente a los usuarios, aunque también se podría discriminar a través del nombre de usuario, que podría ser un apodo. Aquí el proceso de registro es sencillo, la propia página web ofrecía un mecanismo para registrarse y otro para poder iniciar sesión con esas credenciales.

Además de eso se ofrecía la posibilidad de volver a establecer la contraseña (reset) cuando el usuario se había olvidado de ella, cambiar la contraseña, ect. Es decir, la gestión básica que un usuario puede necesitar sobre las cuentas que usase.

Este modo de gestión de cuentas de usuario sigue siendo válido, pero en determinadas ocasiones (cada vez más) es más cómodo utilizar un proveedor de inicio de sesión para los usuarios.

¿Qué hacer con las contraseñas?

Un problema recurrente suele ser cómo gestionar las contraseñas en los sitios web. Las contraseñas son información sensible que tiene que almacenarse de forma segura y a la vez que su pueda acceder a ellas para poder comprobar la identidad del usuario. En condiciones generales, suele ser una mala práctica guardar la contraseña en texto plano, para hacer la comparación. Es mucho mejor guardar en la base de datos un hash de la contraseña, de esta manera lo que se guarda es un valor que permite comparar el hash de las contraseñas para ver si el proceso es correo o no.

La forma y el algoritmo que se utiliza para crear este hash es variado, dependiendo del lenguaje o del tipo de hash que se vaya a utilizar, pero dentro de los algoritmos, se desaconseja el uso de MD5.

El problema de las mil cuentas

Este escenario mostrado hasta ahora hacía que todo el mundo tuviera que registrarse en todos los sitios web para poder acceder a las características que deseaba. Esto tenía como consecuencia que el número de cuentas que cada usuario dispone aumente de manera considerable, haciendo que las gestión de estas credenciales sea también compleja. Esto único al hecho de que los humanos son malos recordando contraseñas aleatorias que tienen una entropía grande, pero que son fáciles para las máquinas hacen que todo el mundo utilice la misma contraseña para todos los servicios.

clip_image002

Viñeta de XKCD https://xkcd.com/936/

Proveedores de identidad

Paralelamente a toda esta gestión de cuentas que se ha estado realizado hasta ahora y que en algunos casos tiene sentido, han ido apareciendo en Internet diferentes tipos de proveedores de identidad. Ya sea de una forma u otra, estos proveedores son los que contiene la información de identidad de los usuarios y los demás sitios web las utilizan para que sus usuarios inicien sesión utilizados estos proveedores.

La idea no es nueva, en las redes de ordenadores de las empresas se ha estado utilizando el mismo concepto con los LDAP, entre los que se encuentra Active Directory (Directorio Activo), uno de los gestiones de identidad más famoso y utilizado en empresas. Las máquinas clientes se unían al dominio y una vez que se establecía una relación de confianza entre la máquina y el controlador de dominio, los usuarios podían iniciar sesión en cualquier sitio web que tuviera autenticación Windows. Internamente Windows y Active Directoy utilizan un protocolo llamado Kerberos que utiliza el concepto de tickets para autorizar y autenticar a los usuarios en una red no segura.

Internet

Pero en Internet donde el protocolo que más se utiliza es HTTP para enviar información utilizar un protocolo como Kerberos es harto complicado y además obliga a que todos los dispositivos sepan usar este protocolo, limitando mucho lo métodos de autenticación.

Por eso es necesario tener otro protocolo de autenticación que sea lo suficientemente flexible para utilizarse dentro del protocolo HTTP. Esta idea se fue evolucionando a través de lo que se llama federación, que consiste en solicitar a un proveedor de identidad la veracidad de un usuario en base a unas evidencias, que normalmente son una combinación de nombre de usuario y contraseña. Este proceso implicad que lo usuarios no inician sesión en la web que solicita la identidad del usuario, sino que esta web, envía una solicitud a un proveedor externo que conoce al usuario.

clip_image004

Para realizar este proceso hay diferentes tipos de protocolos dependiendo del tipo de dispositivo y de las capacidades del mismo.

Uno de los protocolos más usados es OAuth, que utilizas sitios webs como Facebook, Twitter, etc. Además, existen otro tipo de protocolo como WS-Fed, SAML 2-0, OpenID. Cada uno de ellos con sus características especiales.

Hoy en día hay varios sitios web que se ofrecen como proveedores de identidad con los que los demás desarrolladores pueden utilizar para sus aplicaciones. Entre ellos se encuentra Microsoft Account, Google, Facebook, Twitter y Microsoft Azure Active Directory. Los usuarios están acostumbrados a iniciar sesión en otros sitios web utilizando estos proveedores.

El presente y futuro

Con lo visto hasta ahora, la gestión de la identidad online se ha complicado bastante, los usuarios ya no quieren crearse una cuenta en todos los sitios web, sino que de desean utilizar estos proveedores de identidad para hacer el inicio de sesión. Todo esto multiplicado con la cantidad de dispositivos que los usuarios tienen actualmente hace que mucha gente deje de iniciar sesión, o incluso peor, dejar de usar los servicios por no acordarse de las credenciales.

En el siguiente artículo se presentará la solución técnica de esta nueva forma de gestionar la identidad online.

Luis Guerrero.

Technical Evangelist Microsoft Azure.

@guerrerotook