Volver a Inicio
Volver a Otaingenio Lab
MOODLE · LTI 1.3 · SEGURIDAD JUNIO 2026
Kit de configuración completo

Otaingenio LTI & Security Kit

4 pasos universales para conectar Moodle con herramientas externas + blindaje de contenido al client-side.

Conectar contenidos externos a Moodle mediante LTI 1.3 es el estándar de la industria, pero abre una brecha: cualquier estudiante con conocimientos mínimos de inspección de navegador puede extraer tu código, tus textos o clonar tus herramientas. Este Kit resuelve la seguridad del cliente y unifica el proceso de conexión en 4 pasos limpios.

La arquitectura en un vistazo

LTI 1.3 se basa en OAuth2 + OpenID Connect. La confianza se construye emparejando 4 bloques de datos entre ambos lados.

Flujo de registro simétrico LTI 1.3
Moodle (Plataforma)
Genera parámetros iniciales Las URLs de Moodle
Registra las claves del proveedor El Keyset URL externo
① Enviar URLs de Moodle
② Configurar en la Tool
④ Guardar en Moodle
③ Copiar Client ID y Keyset
Vercel / Tool (Proveedor)
Configuración & Claves Recibe datos y genera Client ID / Claves
Despliega URLs de retorno URLs de la Tool a Moodle

Los 4 pasos universales

1

Registro en la herramienta (OIDC & Redirection)

En Moodle → Administración del sitio

Ve a Administración > Plugins > Herramientas externas > Gestionar herramientas y selecciona «Configurar herramienta manualmente». Moodle te pedirá las URLs del proveedor externo. Introduce:

URL de inicio de sesión OpenID Connect
El punto de entrada donde la herramienta externa valida quién es el usuario antes de conceder acceso.
URL de redirección de la herramienta
La dirección segura a la que Moodle enviará al usuario una vez aprobado el token de seguridad.
⚠️ Nota técnica crítica: LTI 1.3 utiliza protocolos de seguridad avanzados basados en OAuth2. Es estrictamente obligatorio que tanto Moodle como tu proveedor externo (Vercel, etc.) funcionen bajo protocolo seguro HTTPS (con certificado SSL activo). Si intentas configurarlo en entornos HTTP locales, el navegador bloqueará las cookies de sesión (política SameSite) y el inicio de sesión fallará silenciosamente.
2

Intercambio de parámetros de plataforma

Moodle genera · Tú copias al proveedor

Una vez guardado el paso anterior, Moodle genera automáticamente 3 datos únicos y dinámicos. Cópialos y pégalos en el panel de configuración de tu herramienta externa (Vercel, SCORM Cloud, etc.):

ID de la plataforma (Issuer URL)
Normalmente la URL de tu propio Moodle. Ej: https://campus.tudominio.com
Client ID
Código numérico único generado por Moodle para esa herramienta concreta. No confundir entre herramientas.
URL de claves públicas (Keyset URL)
La dirección de Moodle donde se alojan las claves criptográficas públicas que firman los tokens JWT.
3

Configuración de la clave pública de la herramienta

Sin contraseñas compartidas · Solo firmas RSA

LTI 1.3 elimina las contraseñas compartidas de LTI 1.1. Funciona con firmas de clave pública/privada (RSA), lo que hace imposible la suplantación de mensajes entre plataforma y herramienta.

En la configuración de Moodle, selecciona el tipo de clave como «URL del conjunto de claves (Keyset URL)» y pega la URL de claves públicas que te proporciona tu proveedor externo. Esto permite que Moodle verifique que los datos que le devuelve la herramienta no han sido manipulados en tránsito.

Por qué importa
Cada mensaje entre Moodle y la herramienta va firmado digitalmente. Sin esta clave, la herramienta rechaza la conexión por protocolo.
4

Activación del enlace y mapeo de roles

En el curso · Configuración avanzada

Crea el enlace de la herramienta dentro del curso de Moodle. En la configuración avanzada de privacidad, activa:

Compartir nombre del lanzador
Indispensable para que la herramienta reciba el nombre del usuario y pueda personalizar la sesión.
Compartir correo del lanzador
Vital para que las variables de Moodle lean correctamente los roles y permitan que scripts inteligentes diferencien en tiempo real si quien entra tiene permisos de edición (Manager) o es un alumno regular.
Parte 2: Blindaje Operativo Client-Side
Copia este script y pégalo en Administración del sitio > Apariencia > HTML adicional > Dentro del HEAD. El código se ejecuta de forma asíncrona: detecta si el usuario tiene menús de gestión o edición activos y, si es así, se auto-desactiva para no interferir con tu trabajo. Si es un estudiante, bloquea la selección, el clic derecho y las herramientas de desarrollo en 1,5 segundos.
HTML / JavaScript — Pegar en Within HEAD
<script>
document.addEventListener("DOMContentLoaded", function() {

    function evaluarSeguridad() {
        // 1. Buscar texto de administración (independiente del tema visual)
        let tieneMenuAdmin = false;
        document.querySelectorAll('a, span, button, p').forEach(el => {
            let txt = el.innerText.toLowerCase();
            if (txt.includes('administración del sitio') || txt.includes('site administration')) {
                tieneMenuAdmin = true;
            }
        });

        // 2. Comprobaciones técnicas por selectores y variables de Moodle
        let isManager = tieneMenuAdmin ||
                        document.querySelector('[data-key="siteadmin"]') ||
                        document.querySelector('.editmode-switch') ||
                        document.querySelector('#editmode-switch') ||
                        document.querySelector('a[href*="/admin/"]') ||
                        (window.M && window.M.cfg && window.M.cfg.userid === 2);

        // Si eres Manager/Admin, el script se detiene aquí
        if (isManager) {
            console.log("Otaingenio: Rol de gestión detectado. Protecciones desactivadas.");
            return;
        }

        // 3. Si es estudiante, se ejecutan los bloqueos
        document.addEventListener('contextmenu', event => event.preventDefault());

        let antiSelectStyle = document.createElement('style');
        antiSelectStyle.innerHTML = 'body, html, iframe, p, div, span { -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; user-select: none !important; }';
        document.head.appendChild(antiSelectStyle);

        document.onkeydown = function(e) {
            if (e.keyCode == 123) { return false; }                             // F12
            if (e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) { return false; }  // DevTools
            if (e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) { return false; }  // Inspect
            if (e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) { return false; }  // Console
            if (e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) { return false; }        // Código fuente
            if (e.ctrlKey && e.keyCode == 'C'.charCodeAt(0)) { return false; }        // Copiar
        };
    }

    // Margen de 1,5s para que Moodle pinte los menús asincrónicos de Admin
    setTimeout(evaluarSeguridad, 1500);
});
</script>
Artículos relacionados