Los complementos de Classroom se cargan en un iframe para proporcionar al usuario final una experiencia del usuario fluida y conveniente. Hay cinco tipos distintos de iframe. Consulta las páginas de iframes en el directorio de recorridos del usuario para obtener una descripción general del propósito y la apariencia de cada iframe.
Lineamientos de seguridad de iframe
Se espera que los desarrolladores sigan las prácticas recomendadas de la industria para proteger sus iframes. Sin embargo, también debes incorporar ciertas interacciones de la API en tu flujo de usuarios para confirmar que tienes credenciales válidas y que puedes identificar correctamente el rol del usuario en el curso.
Configuración de la aplicación del servidor
Para proteger el iframe, recomendamos las siguientes configuraciones del servidor:
- Se requiere HTTPS. Recomendamos usar TLS 1.2 o una versión posterior y habilitar HTTP con Seguridad de Transporte Estricta (HSTS). Consulta este artículo de MDN relacionado sobre la Seguridad de Transporte Estricta.
- Habilita la Política de Seguridad del Contenido Estricta (CSP Estricta). Consulta este artículo de OWASP y este artículo de MDN relacionado sobre la Política de Seguridad del Contenido.
- Habilita el atributo de cookie segura. Consulta el atributo HttpOnly y este artículo de MDN relacionado sobre las cookies.
Parámetros de consulta
Los iframes pasan información fundamental al complemento como parámetros de consulta. Hay dos categorías de parámetros: los relacionados con archivos adjuntos y los relacionados con el acceso.
Parámetros relacionados con archivos adjuntos
Los parámetros relacionados con archivos adjuntos proporcionan al complemento información sobre el curso, la tarea, el archivo adjunto del complemento, el envío del estudiante y un token de autorización.
- ID del curso
El valor
courseIdes un identificador del curso.Se incluye en todos los iframes.
- ID de artículo
El valor
itemIdes un identificador deAnnouncement,CourseWorkoCourseWorkMaterialal que se adjunta este archivo adjunto.Se incluye en todos los iframes.
- Tipo de elemento
El valor
itemTypeidentifica el tipo de recurso al que se adjunta este archivo adjunto. El valor de cadena que se pasa es uno de"announcements","courseWork"o"courseWorkMaterials".Se incluye en todos los iframes.
- ID del archivo adjunto
El valor
attachmentIdes un identificador del archivo adjunto.Se incluye en los
teacherViewUri,studentViewUriystudentWorkReviewUriiframes.- ID del envío
El valor
submissionIdes un identificador del trabajo del estudiante, pero debe usarse en combinación conattachmentIdpara identificar el trabajo del estudiante de una tarea en particular.Se incluye en
studentWorkReviewUri.
- Token del complemento
El valor
addOnTokenes un token de autorización que se usa para realizar llamadas aaddOnAttachments.createpara crear el complemento.Se incluye en el iframe de descubrimiento de archivos adjuntos y en el iframe de actualización de vínculos.
- URL para actualizar
La presencia del valor
urlToUpgradeimplica que el profesor incluyó un archivo adjunto de vínculo en la tarea y aceptó actualizarlo a un archivo adjunto del complemento. Si aún no tienes configurada esta función, consulta la guía para actualizar vínculos a archivos adjuntos del complemento para obtener más detalles.Se incluye en el iframe de actualización de vínculos.
Parámetros relacionados con el acceso
El parámetro de consulta login_hint proporciona información sobre el usuario de Classroom que visita la página web del complemento. Este parámetro de consulta se proporciona en la URL src del iframe. Se envía cuando el usuario usó tu complemento anteriormente para ayudar a reducir la fricción de acceso del usuario final. Debes controlar este parámetro de consulta en la implementación de tu complemento.
- Sugerencia de acceso
login_hintes un identificador único para la Cuenta de Google del usuario. Después de que el usuario acceda a tu complemento por primera vez, el parámetrologin_hintse pasará en cada visita posterior al complemento por el mismo usuario.Hay dos usos posibles para el parámetro
login_hint:- Pasa el valor
login_hintdurante el flujo de autenticación para que el usuario no necesite ingresar sus credenciales cuando aparezca el diálogo de acceso. El usuario no accede automáticamente. - Después de que el usuario haya accedido, usa este parámetro para comparar el valor con cualquier usuario al que ya hayas accedido al complemento. Si encuentras una coincidencia, puedes dejar al usuario conectado y evitar mostrar un flujo de acceso. Si el parámetro no coincide con ninguno de tus usuarios conectados, pídele al usuario que acceda con un botón de acceso con la marca de Google.
Se incluye en todos los iframes.
- Pasa el valor
iframe de descubrimiento de archivos adjuntos
| Dimensión | Descripción |
|---|---|
| Obligatorio | Sí |
| URI | Se proporciona en los metadatos del complemento |
| Parámetros de consulta | courseId, itemId, itemType, addOnToken y login_hint. |
| Altura | 80% de la altura de la ventana menos 60 px para el encabezado superior |
| Ancho | Máximo de 1,600 px 90% del ancho de la ventana cuando la ventana tiene un ancho de <= 600 px wide 80% del ancho de la ventana cuando la ventana tiene un ancho de > 600 px |
Situación de ejemplo de descubrimiento de archivos adjuntos
- Se registra un complemento de Classroom en Google Workspace Marketplace con un URI de descubrimiento de archivos adjuntos de
https://example.com/addon. - Un profesor instala este complemento y crea un anuncio, una tarea o material nuevos en uno de sus cursos. Por ejemplo,
itemId=234,itemType=courseWorkycourseId=123. - Mientras configura ese elemento, el profesor elige el complemento recién instalado como archivo adjunto.
- Classroom crea un iframe con la URL src establecida en
https://example.com/addon?courseId=123&itemId=234&itemType=courseWork&addOnToken=456.- El profesor realiza el trabajo dentro del iframe para seleccionar un archivo adjunto.
- Cuando se selecciona el archivo adjunto, el complemento envía un
postMessagea Classroom para cerrar el iframe.
iframes teacherViewUri y studentViewUri
| Dimensión | Descripción |
|---|---|
| Obligatorio | Sí |
| URI | teacherViewUri o studentViewUri |
| Parámetros de consulta | courseId, itemId, itemType, attachmentId y login_hint. |
| Altura | 100% de la altura de la ventana menos 140 px para el encabezado superior |
| Ancho | 100% del ancho de la ventana |
iframe studentWorkReviewUri
| Dimensión | Descripción |
|---|---|
| Obligatorio | No (determina si se trata de un archivo adjunto de tipo de actividad) |
| URI | studentWorkReviewUri |
| Parámetros de consulta | courseId, itemId, itemType, attachmentId, submissionId y login_hint. |
| Altura | 100% de la altura de la ventana menos 168 px para el encabezado superior |
| Ancho | 100% del ancho de la ventana menos el ancho de la barra lateral<> la barra lateral es de 312 px cuando se expande y de 56 px cuando se contrae |
iframe de actualización de vínculos
| Dimensión | Descripción |
|---|---|
| Obligatorio | Sí, si tu complemento admite la actualización de vínculos a archivos adjuntos del complemento es compatible. |
| URI | Se proporciona en los metadatos del complemento |
| Parámetros de consulta | courseId, itemId, itemType, addOnToken, urlToUpgrade y login_hint. |
| Altura | 80% de la altura de la ventana menos 60 px para el encabezado superior |
| Ancho | Máximo de 1,600 px 90% del ancho de la ventana cuando la ventana tiene un ancho de <= 600 px wide 80% del ancho de la ventana cuando la ventana tiene un ancho de > 600 px |
Situación de ejemplo de actualización de vínculos
- Se registra un complemento de Classroom con un URI de actualización de vínculos de
https://example.com/upgrade.- Proporcionaste los siguientes patrones de prefijo de host y ruta de acceso para los archivos adjuntos de vínculos que Classroom debería intentar actualizar a un archivo adjunto del complemento:
- El host es
example.comy el prefijo de ruta de acceso es/quiz.
- El host es
- Un profesor crea un anuncio, una tarea o material nuevos en uno de sus cursos. Por ejemplo,
itemId=234,itemType=courseWorkycourseId=123. - Un profesor pega un vínculo,
https://example.com/quiz/5678, en el diálogo de archivo adjunto de vínculo que coincide con un patrón de URL que proporcionaste. Luego, se le solicita al profesor que actualice el vínculo a un archivo adjunto del complemento. Classroom inicia el iframe de actualización de vínculos con la URL establecida en
https://example.com/upgrade?courseId=123&itemId=234&itemType=courseWork&addOnToken=456&urlToUpgrade=https%3A%2F%2Fexample.com%2Fquiz%2F5678.Evalúas los parámetros de consulta que se pasan en el iframe y realizas una llamada a el
CreateAddOnAttachmentextremo. Ten en cuenta que el parámetro de consultaurlToUpgradeestá codificado como URI cuando se pasa en el iframe. Debes decodificar el parámetro para obtenerlo en su forma original. Por ejemplo, JavaScript ofrece la funcióndecodeURIComponent().Cuando se crea correctamente un archivo adjunto del complemento a partir de un vínculo, envías un
postMessagea Classroom para cerrar el iframe.
Cierra el iframe
El iframe se puede cerrar desde la herramienta de aprendizaje enviando un postMessage con
la carga útil {type: 'Classroom', action: 'closeIframe'}.
Classroom solo acepta este postMessage del host_name+port correspondiente al URI original que se abrió.
<button id="close">Send message to close iframe</button>
<script>
document.querySelector('#close')
.addEventListener('click', () => {
window.parent.postMessage({
type: 'Classroom',
action: 'closeIframe',
}, '*');
});
</script>
Cerrar iframe desde el iframe
El dominio y el puerto de la página que envía el evento postMessage deben tener el mismo dominio y puerto que el URI que se usa para iniciar el iframe. De lo contrario, se ignora el mensaje. Una solución alternativa es redireccionar a una página en el dominio original que no haga más que enviar el evento postMessage.
Cerrar iframe desde una pestaña nueva
Las protecciones multidominio impiden que esto funcione. Una solución alternativa es controlar las comunicaciones entre el iframe y la pestaña nueva por tu cuenta, y dejar que el iframe sea el responsable de emitir el evento postMessage de cierre. Como nota al margen, se quitará el hipervínculo "Abrir en Nombre del socio" para que los usuarios no creen pestañas de esta manera en el futuro cercano.
Restricciones
Todos los iframes se abren con los siguientes atributos de sandbox:
allow-popupsallow-popups-to-escape-sandboxallow-formsallow-scriptsallow-storage-access-by-user-activationallow-same-origin
y la siguiente política de funciones:
allow="microphone *"
Bloqueo de cookies de terceros
Ten en cuenta que el bloqueo de cookies de terceros dificulta mantener una sesión conectada en un iframe. Consulta https://www.cookiestatus.com para conocer el estado actual del bloqueo de cookies en diferentes navegadores. Por supuesto, este problema no es exclusivo de los complementos de Google Classroom y afecta a todos los sitios web que incluyen iframes de terceros. Muchos de nuestros socios ya se encontraron con este problema.
Estas son algunas soluciones alternativas generales:
- Abre una pestaña nueva para crear la cookie en un contexto propio. Algunos navegadores otorgan acceso a las cookies creadas en el contexto propio mientras están en un contexto de terceros.
- Pídele al usuario que permita las cookies de terceros. Es posible que esto no siempre sea posible con todos los usuarios.
- Diseña aplicaciones web de una sola página que no dependan de cookies.
Se esperan más restricciones de cookies en versiones futuras del navegador. Crea solicitudes de funciones para enviar comentarios a Google sobre cómo reducir el esfuerzo requerido por los socios.
Habilita la visibilidad de los complementos con expresiones regulares de URL
Los profesores suelen crear tareas con archivos adjuntos de vínculos. Para promocionar el uso de tu complemento, puedes especificar expresiones regulares que coincidan con las URLs de los recursos a los que se puede acceder en tu complemento. Un profesor que adjunta un vínculo que coincide con una de tus expresiones regulares ve un diálogo descartable que lo alienta a probar tu complemento. Solo verá el diálogo si el complemento ya está instalado en su cuenta.
Si deseas proporcionar este comportamiento a los profesores, proporciónales a tus contactos de Google las expresiones regulares adecuadas. Si las expresiones regulares que proporcionas son demasiado amplias o entran en conflicto con otro complemento, es posible que se modifiquen para que sean más restringidas o distintas.
Figura 1. Un profesor selecciona un archivo adjunto de vínculo para una tarea nueva.
Figura 2. Un profesor pega un vínculo de una fuente externa. El profesor ya instaló el complemento de Classroom de terceros.
Figura 3. El diálogo interactivo que se le presenta al profesor cuando el vínculo pegado coincide con una expresión regular especificada por el desarrollador externo.
Si un profesor selecciona "Probar ahora" en la ventana emergente como se muestra en la figura 3, se lo redireccionará al iframe de descubrimiento de archivos adjuntos de tu complemento.