Por qué merece la pena verificar la identidad en las cuentas
Si gestionas Nextcloud para una escuela, una ONG o un organismo público en Rumanía, ya conoces el punto débil del autorregistro: cualquiera con una dirección de correo puede crear una cuenta. Desactivar el registro significa pasar la semana creando usuarios a mano. Para muchas organizaciones, el término medio honesto es la verificación de identidad en Nextcloud: el visitante se registra desde su propio móvil, demuestra quién es con un DNI o un permiso de conducir rumano y la cuenta se crea al momento.
IDRegister es un plugin de Nextcloud que hace exactamente esto. El documento se lee en vivo con RapidOCR, la selfie se compara con la foto del documento con un pequeño giro de cabeza como prueba de vida, y el número personal (CNP) se guarda solo como hash con sal, de modo que un documento genera una única cuenta. La imagen del documento y la selfie nunca se almacenan. Esa última parte es lo que lo hace defendible ante el RGPD: conservas el mínimo necesario para prestar el servicio, no una colección de escaneos de documentos.
Este tutorial repasa la configuración desde el punto de vista de quien autoaloja. Todos los detalles están en la guía de usuario; aquí me centro en las decisiones que importan para un despliegue en el sector público o en una ONG.
Requisitos previos
Antes de empezar, asegúrate de tener:
- Nextcloud 30 a 34 y PHP 8.1 o superior, con
imagick(GD funciona como alternativa). - HTTPS en la instancia. Los navegadores de móvil solo permiten el acceso a la cámara a través de HTTPS, así que esto no es opcional.
- Python 3.8 o superior (
python3) en el servidor. La app crea su propio entorno y descarga su lector y sus modelos faciales (RapidOCR, ONNX Runtime, OpenCV y el paquete de modelosbuffalo_lde InsightFace, unos 450 MB) en el directorio de datos de Nextcloud. Esa descarga necesita acceso a internet una vez. - Opcionalmente
tesseract-ocrcontesseract-ocr-roncomo lector de reserva. Tesseract por sí solo lee mal las tarjetas fotografiadas, así que trátalo como respaldo, no como la vía principal. - Una cuenta de MediaLab Works con una licencia activa, una licencia de por vida dentro de su ventana de actualizaciones o la prueba gratuita de 30 días.
Una palabra sobre el RGPD antes de recoger ningún dato: decide quién es el responsable del tratamiento, deja por escrito por qué recoges el nombre y el correo, y enlaza tus propios términos en la página de ajustes. IDRegister guarda el CNP solo como hash con sal y descarta las imágenes, lo que mantiene mínimo tu tratamiento, pero el papeleo organizativo sigue siendo tuyo.
Paso 1: Instalar la app y activar la licencia
Descarga el archivo idregister-x.y.z.tar.gz desde Licenses en tu cuenta de MediaLab Works y extráelo en apps/ (o custom_apps/) para obtener apps/idregister/ con el usuario del servidor web como propietario:
cd /var/www/nextcloud/apps
sudo tar -xzf ~/idregister-x.y.z.tar.gz
sudo chown -R www-data:www-data idregister
sudo -u www-data php occ app:enable idregister
Abre Administration settings → IDRegister → License, pega tu clave de licencia y guarda. La app vincula la clave a esta instancia y muestra la licencia como Active. La comprobación se ejecuta una vez al día; sin internet, la app sigue funcionando 7 días después de la última comprobación correcta. Las cuentas ya creadas nunca se ven afectadas por la caducidad de la licencia: siguen iniciando sesión con su contraseña y no se elimina nada.
Paso 2: Instalar el lector
En la misma página de ajustes, pulsa Install the reader. Una tarea en segundo plano crea un entorno de Python en appdata_<id>/idregister/python y descarga los modelos. Desde una terminal, el mismo paso es:
sudo -u www-data php occ idregister:install-ocr
Si alguna vez necesitas empezar de cero, añade --remove. Hazlo antes de abrir el registro a los visitantes; de lo contrario, verán un servicio que no puede leer nada.
Paso 3: Abrir el registro
El interruptor principal está desactivado por defecto. Actívalo. La página de registro es /index.php/apps/idregister/ y se añade un enlace a la página de inicio de sesión. La interfaz está disponible en rumano e inglés, lo que encaja bien con un organismo público rumano.
Paso 4: Decidir las comprobaciones
Todas las comprobaciones están activadas por defecto, y yo las mantendría así en un despliegue público:
- Modo exprés: la cuenta se crea al momento con un nombre de usuario aleatorio y una contraseña que se muestra una sola vez.
- Registro solo desde un móvil o una tablet: el móvil es el dispositivo con cámara a mano; un ordenador muestra un código QR e inicia sesión cuando el móvil termina.
- Comparación de la selfie con el documento y giro de cabeza durante la selfie: la selfie se compara con la foto usando modelos de InsightFace sobre ONNX Runtime, y el giro de cabeza demuestra que hay una persona real.
- Rechazar copias y pantallas: color frente a copias en blanco y negro, muaré frente a pantallas y reflejos que se mueven al inclinar la tarjeta. Cuando la comprobación duda, la página pide una inclinación y luego envía el registro a un administrador.
- Rechazar documentos caducados y una cuenta por DNI.
El lector reconoce los DNI antiguos, el nuevo carné electrónico (CEI) y el permiso de conducir. Se combinan la zona de lectura mecánica, las etiquetas impresas y el CNP (validado por su dígito de control).
Paso 5: Configurar las cuentas y los límites relevantes para el RGPD
En Accounts controlas lo que permite la organización:
- Un administrador tiene que aprobar cada cuenta nueva (desactivado por defecto). Para una escuela suele ser el ajuste adecuado.
- Documentos aceptados: DNI, permiso de conducir o ambos.
- Edad mínima, grupos por defecto, cuota para usuarios nuevos, número máximo de cuentas (0 = sin límite).
- Dominios de correo permitidos y bloqueados: útil para mantener los registros dentro del dominio de tu organización.
- Enlace a tus términos y Se requiere un número de teléfono (activado por defecto; desactívalo para que el teléfono sea opcional). Se aceptan números de teléfono de cualquier país.
Configura Delete unconfirmed registrations after (horas, 48 por defecto). Los registros cuyo correo nunca se confirma se eliminan automáticamente junto con la cuenta desactivada. Es una historia limpia de minimización de datos para incluir en tus registros.
Paso 6: Lo que experimenta el visitante
El visitante abre la página en el móvil, coloca el documento en el encuadre y sigue las indicaciones (más cerca, no te muevas, inclina), y después se hace una selfie con un pequeño giro de cabeza. La cuenta se crea y el visitante inicia sesión. El nombre del documento pasa a ser el nombre visible y queda bloqueado; el correo (verificado con un código de seis dígitos y un enlace) y el teléfono se añaden en el perfil y quedan fijados una vez confirmados.
En un ordenador, la página muestra un código QR; el visitante lo escanea, completa el flujo en el móvil y el ordenador inicia sesión.
Paso 7: Extras opcionales
- Iniciar sesión con Google: crea un cliente OAuth de tipo Web application en la consola de Google Cloud, añade la URI de redirección que se muestra en la página de ajustes (
https://<your server>/index.php/apps/idregister/google/callback) y pega el ID de cliente y el secreto. Solo hacen falta los ámbitosopenid,emailyprofile. Google nunca crea cuentas: solo vincula una cuenta existente con la misma dirección verificada. - Iniciar sesión con tu teléfono: los móviles Android emparejados aprueban un inicio de sesión en cualquier ordenador tras una huella dactilar, con una clave que nunca sale del teléfono.
- Registro de pago con Cashier (versión 2.1 o superior de IDRegister): cuando Cashier está instalado, tiene licencia y muestra planes visibles, la página ofrece "Pay a plan instead of scanning an ID". El visitante confirma un correo, paga con Stripe y obtiene una cuenta marcada como verified by payment, sin documento ni selfie. Dos interruptores lo controlan: ofrecer la vía de pago y exigir la comprobación de identidad solo para la vía gratuita (activado por defecto).
- App complementaria para Android: el APK firmado está en Account → Licenses, requiere Android 8.0 o superior y es la app que se usa para el inicio de sesión con teléfono. Es opcional; la página web funciona en cualquier navegador de móvil.
Consejos y solución de problemas
- "No text recognition is installed" en Administration settings → Overview: pulsa Install the reader o ejecuta
occ idregister:install-ocr. Un aviso de que los documentos se leen con Tesseract significa lo mismo. - La cámara no arranca: comprueba HTTPS y el permiso de cámara en el navegador. La app de Android es la alternativa.
- Las selfies nunca coinciden: faltan los modelos faciales; reinstala el lector. Si la selfie no encaja en tu caso de uso, la comprobación de selfie se puede desactivar.
- "Phone numbers from this country cannot be used here": las reglas que se entregan con tu licencia pueden incluir una lista opcional de prefijos telefónicos permitidos. Está vacía por defecto y solo la configura MediaLab Works bajo petición, así que escríbenos si necesitas que se establezca o se borre. Esas mismas reglas añaden a tus dominios bloqueados una breve lista de servicios de correo desechable.
- La vía de pago no aparece: falta Cashier, no tiene licencia, no tiene ningún plan visible, Stripe no está conectado o el interruptor está desactivado.
- Probar el lector:
occ idregister:scan <picture>prueba el lector con una imagen y no almacena nada.occ idregister:cleanupelimina los registros que nunca se confirmaron.
Conclusión
Para una escuela, una ONG o un organismo público rumano, IDRegister te da autorregistro sin renunciar a la identidad. El visitante solo necesita un móvil y un documento que ya lleva encima, tú obtienes una cuenta por persona y los datos que conservas son deliberadamente pocos: un nombre, un correo y un teléfono verificados, y un hash con sal del CNP. Las imágenes se leen en memoria y se descartan, que es el tipo de diseño que puedes explicar a un DPO sin pestañear. Empieza por la página del producto, sigue la guía para los ajustes y consulta el changelog antes de actualizar. Si algo no está claro, la base de conocimiento y las FAQ son buenos siguientes pasos, y siempre puedes contactarnos.