El otro día me propusieron a ver si era posible desarrollar un
servicio de validación de entradas, vamos a llamarlo, que permitiera
validar las entradas y fuera ágil. El servicio debía cumplir las
siguientes especificaciones
- Estar en producción en 10-12 días
- Permitir acceder al recinto usando una entrada impresa en papel
- Permitir acceder al recinto usando la entrada sin imprimirla en papel
- Comunicarse con los servicios centrales del cliente para integrar
la información de quién había entrado y cuando
Nos pusimos a pensar y planteamos las siguientes ideas
- Papel/Móvil y Boli
- Papel/Móvil y Ordenador
- Papel/Móvil y lector de código de barras
- Papel/Móvil y móvil
Si alguna vez has estado en un evento en el que la lista de
acceso se valida con papel y boli sabrás que tienen varias desventajas
(pese a tener una gran ventaja … que es no necesita desarrollo):
- Si acude mucha gente no es fácil que todo el mundo le de tiempo a
entrar antes de que empiece el evento - Si hay varias puertas …. el sistema tiene puntos de fallo si no se
organiza quién entra por qué puerta
Por tanto las dos primeras opciones quedan descartadas.
Las
otras dos que nos quedan estarían vinculadas al hecho de disponer de
un lector de códigos de barras y un servicio que recoja la lectura y
la envíe a algún lado…. Si descartamos la del lector porque habría
que comprarlos etc… nos quedamos con que lo mejor sería desarrollar
un poco más la cuarta opción a ver hasta donde nos lleva.
La opción cuarta aún así tiene una gran debilidad y es
la de desarrollar la APP para el dispositivo móvil que permite
validar la entrada. Con esto en mente desarrollamos los
siguientes diagramas que nos permitían aclarar un poco el panorama
…. pintar siempre es una buena idea
Donde se ve que necesitamos un sistema que genere
códigos QR para las entradas y un QR que sirva para
registrar el móvil que está haciendo de lector de QR. La
idea es olvidarnos de desarrollar una app para el móvil y que de
alguna forma cualquier móvil que tenga un cámara se puede usar
como lector de QR.
Si no vamos a tener una app propia disponible tenemos que
hacer que no todos los móviles sirvan para enviar la información al
servidor, por un tema de seguridad principalmente. Además
como queremos poder dar feedback a la persona que está en la puerta
vamos a vincular el móvil con un PC que estará también en la
puerta. Este gráfico representa cómo se ha diseñado el
protocolo que vincula ambos dispositivos… Esto se haría una vez por
cada puerta/persona que está validando los accesos.
Por último
la fase de validación de las entradas
Donde vemos que la persona que va a entrar, presenta la entrada
en la puerta. Esta entrada se escanea con el lector de QR estándar del
móvil (hay muchos en el mercado) y al leer la URL que está en el QR la
APP que ha leido el QR lanza el navegador con dicha URL que se procesa
en el servidor. Esta URL genera una llamada de vuelta al PC vinculado
a este móvil (paso 3.2-3.3) y el proceso de validación y registro se
da por finalizado.
Ahora bien esto es en teoría y son papeles pintados … así que
para probarlo hemos desarrollado una PoC que usa los siguientes elementos
- Librería ZXING para generara códigos QR
- Servicios REST desarrollados usando JAXRS
- WebSockets para comunicar eventos del servidor al cliente
- Servidor tomcat 7
En total hemos desarrollado las siguientes clases java
- QRGenerator
- RegistService
- WebSocketService
Con estas tres clases y el programa de lectura de QRs del móvil hemos
hecho una PoC plenamente funcional que cumple los requisitos. (Hemos
tardado 8 horas, post incluido). Evidentemente faltaría hacer
bastantes cosas para poner el desarrollo en producción pero con esta
orientación creemos que se podría hacer el proyecto en 10 -12 días
Las grandes ventajas que creemos que tiene este modelo son
- Poco código desarrollado
- No depende de una aplicación específica desarrollada para el móvil
- Permite usar cualquier dispositivo con cámara como lector de códigos
- Tiene un modelo de seguridad, que sin ser el más seguro del mundo, sirve.
Tiene muchos puntos de mejora está claro
- Modelo de seguridad
- Usar una APP propia para controlar mejor el feedback al usuario
En realidad el punto más fuerte de este modelo creemos que es que es
facilmente convertible en un sistema de
autenticación de dos fases … Adjunto el código
del WAR de la PoC para el que tenga interés en ver el código.