La autenticación en dos pasos es un sistema extra de seguridad usado por las grandes empresas de Internet para dar un plus de seguridad a las cuentas de los usuarios que acceden a ciertos servicios o aplicaciones (como podemos configurar con Google, Microsoft o Dropbox entre otros servicios).
Hasta ahora era algo más bien complejo de implementar y con poca documentación disponible. Pero con Authy todo esto cambia, ya que nos proporciona una API REST sencillísima para implementar la autenticación en dos pasos en... un rato.
¿En qué consiste la autenticación en dos pasos?
La autenticación en dos pasos o de doble factor añade una capa de seguridad extra a la clásica combinación de usuario y contraseña, con el propósito de evitar que cualquier persona que adivine tu usuario y contraseña pueda acceder a una cuenta de un servicio sin el código extra de autenticación.
Este código extra tiene tres puntos a favor de la seguridad (en el caso de TOTP): el primero es que solo se genera en un dispositivo que en condiciones normales únicamente lo lleva encima el usuario legítimo de la cuenta, el segundo es que varía cada 30 segundos, por lo que alguien que ve este código no podrá usarlo pasado cierto tiempo y por último es que la clave no es reutilizable.
Basado en TOTP
La forma más cómoda de crear esta capa extra de seguridad es usar el llamado Time-based One Time Password o contraseña basada en el tiempo de un único uso. Aunque existen otros métodos como es el envío de SMS, las llamadas telefónicas y muchas otros más.
En el caso de TOTP y resumiendo el proceso, se le facilita al usuario un token o código QR con el token, que leerá la aplicación autenticadora para tener la capacidad de generar claves.
Estas claves se generan a partir de la fecha y hora de ese mismo instante y el token, variando estas cada 30 segundos. Obviamente el servidor tiene también la capacidad de generar estas claves y así compara la dada.
Authy hace transparente el proceso
Authy es un servicio (que también dispone de aplicaciones autenticadoras) que nos resume todo este proceso en dos funciones a través de su API:
Primeros pasos en Authy
Lo primero es registrarnos en el servicio, donde posteriormente nos permitirán crear una aplicación para poder usar la API.
Desde el servicio de Authy disponemos de toda la información relativa al servicio y a nuestros usuarios (email asociado, numero de usuarios, estado...). También hay una gráfica con las llamadas a la API, los usuarios nuevos, los SMS o llamadas realizadas (en el caso de usar este método complementario) y las autenticaciones realizadas.
Pero bueno, esto es irrelevante ya que lo importante es ver su simple implementación.
Los ejemplos los voy a realizar con curl, para abstraernos de cualquier otro lenguaje (aunque dispone de APIs que simplifican el proceso en bastantes lenguajes diferentes).
Crear un usuario
Para crear un nuevo usuario debemos de hacer una llamada a la API enviando la información del propio usuario (email y teléfono). La llamada a la API es la siguiente:
POST https://api.authy.com/protected/{FORMAT}/users/new?api_key={KEY}
Donde {FORMAT}
es el formato de respuesta (en nuestro caso JSON) y {KEY}
es la clave de acceso a la API que nos facilitan al crear la aplicación.
curl https://api.authy.com/protected/json/users/new?api_key=f5a59************************ \ -d user[email]='info@xitrus.es' \ -d user[cellphone]='600123456' \ -d user[country_code]='34'
Básicamente le estamos enviando por POST a la API la información del usuario. Con lo que obtendríamos la siguiente respuesta:
{"message":"User created successfully.","user":{"id":1025252},"success":true}
El ID del usuario debemos de almacenarlo para poder hacer las verificaciones.
Para pedir esta información al usuario Authy nos facilita un formulario HTML muy simple para buscar el código de región más fácilmente (lo podemos encontrar en GitHub) y así ahorrarnos tiempo al implementarlo en el cliente web.
Verificar la clave
En esta ocasión disponiendo de nuestra clave y el número de usuario podemos hacer fácilmente la verificación. La llamada sería como la siguiente:
GET https://api.authy.com/protected/{FORMAT}/verify/{TOKEN}/{AUTHY_ID}?api_key={KEY}
Se añade el {AUTHY_ID}
que almacena el ID del usuario en Authy y el {TOKEN}
que es el código de verificación.
Un ejemplo con los datos devueltos anteriormente sería:
curl "https://api.authy.com/protected/json/verify/5282817/1025252?api_key=f5a59************************&force=true"
Que nos devolverá:
// En caso incorrecto {"success":false,"message":"Token is invalid.","errors":{"message":"Token is invalid."}} // En caso correcto {"message":"Token is valid.","token":"is valid","success":"true"} // Al repetir código {"success":false,"message":"Token is invalid. Token was used recently.","errors":{"message":"Token is invalid. Token was used recently."}}
Con esto ya gestionaremos nosotros mismos como se le mostrará al usuario o por ejemplo, añadir la opción de recordar el PC, para no estar pidiendo siempre el código de autenticación (al igual que hacen servicios como Google o Dropbox).
Más funcionalidades
Estas son las funcionalidades básicas, ya que el servicio dispone de envío de SMS y llamadas como método alternativa a la app.
Dispone de una documentación para encontrar todas las funcionalidades extras de la API, aunque tiene APIs en varios lenguajes que nos facilitan aún más las cosas, además de tener un plugin para Wordpress y poderse usar en OpenVPN.
El usuario
El usuario para poder usar esta API necesita la aplicación auntenticadora de Authy, que es similar a Google Authenticator y tiene compatibilidad con la doble autenticación de su propio servicio y del existente que usa Google Authenticator (aunque todo sea dicho, la app es mucho más bonita y configurable que la de Google, si queréis saber más de ella podéis leer este artículo en Xataka Móvil).
Lo que vería nuestro usuario para tener acceso a la clave y acceder a nuestro servicio sería lo siguiente:
Resumen
Si estamos desarrollando una aplicación que necesita de cierta seguridad, no es una mala opción implementar esta doble autenticación, además de que no nos llevará un excesivo tiempo, ya que nos proporcionan todos los medios añadir esta capa de seguridad extra a nuestro servicio.
Aún así, Authy no es gratuito del todo, para cierto volumen alto de usuarios y autenticaciones hay que pasar por caja, aunque para algo de tamaño pequeño o mediano se podría trabajar gratuitamente.
Más información | Authy