Les modules complémentaires Classroom sont chargés dans un iFrame pour offrir à l'utilisateur final une expérience fluide et pratique. Il existe cinq types d'iframe distincts. Pour obtenir un aperçu de l'objectif et de l'apparence de chaque iframe, consultez les pages sur les iframes dans le répertoire "Parcours utilisateur".
Consignes de sécurité pour les iFrame
Les développeurs sont tenus de suivre les bonnes pratiques du secteur pour sécuriser leur iFrame. Toutefois, vous devez également intégrer certaines interactions avec l'API dans votre parcours utilisateur pour confirmer que vous disposez d'identifiants valides et que vous pouvez identifier correctement le rôle de l'utilisateur dans le cours.
Configuration de l'application serveur
Pour protéger l'iFrame, nous vous recommandons les configurations de serveur suivantes :
- Le protocole HTTPS est obligatoire. Nous vous recommandons vivement d'utiliser TLS 1.2 ou une version ultérieure et d'activer HTTP Strict Transport Security (HSTS). Consultez cet article MDN sur la sécurité stricte du transport.
- Activez la stratégie stricte de sécurité du contenu (CSP). Consultez cet article OWASP et cet article MDN sur la stratégie de sécurité du contenu.
- Activez l'attribut de cookie sécurisé. Consultez l'attribut HttpOnly et l'article MDN associé sur les cookies.
Paramètres de requête
Les iFrames transmettent des informations essentielles au module complémentaire sous forme de paramètres de requête. Il existe deux catégories de paramètres : les paramètres liés aux pièces jointes et les paramètres liés à la connexion.
Paramètres liés aux pièces jointes
Les paramètres liés aux pièces jointes fournissent au module complémentaire des informations sur le cours, le devoir, la pièce jointe du module complémentaire, le devoir rendu par l'élève et un jeton d'autorisation.
- ID du cours
La valeur
courseId
est un identifiant du cours.Inclus avec tous les iFrames.
- ID de l'article
La valeur
itemId
est un identifiant deAnnouncement
,CourseWork
ouCourseWorkMaterial
auquel cette pièce jointe est associée.Inclus avec tous les iFrames.
- Type d'élément
La valeur
itemType
identifie le type de ressource auquel cette pièce jointe est associée. La valeur de chaîne transmise est"announcements"
,"courseWork"
ou"courseWorkMaterials"
.Inclus avec tous les iFrames.
- ID de la pièce jointe
La valeur
attachmentId
est un identifiant de la pièce jointe.Inclus avec les iFrames
teacherViewUri
,studentViewUri
etstudentWorkReviewUri
.- ID de la demande
La valeur
submissionId
est un identifiant du devoir de l'élève, mais elle doit être utilisée en combinaison avecattachmentId
pour identifier le devoir d'un devoir spécifique.Inclus dans
studentWorkReviewUri
.
- Jeton de module complémentaire
La valeur
addOnToken
est un jeton d'autorisation utilisé pour effectuer des appelsaddOnAttachments.create
afin de créer le module complémentaire.Inclus avec l'iFrame Attachment Discovery et l'iFrame Link Upgrade.
- URL à mettre à niveau
La présence de la valeur
urlToUpgrade
implique que l'enseignant a inclus une pièce jointe de lien dans le devoir et a accepté de la mettre à niveau vers une pièce jointe de module complémentaire. Si vous n'avez pas encore configuré cette fonctionnalité, consultez le guide sur la mise à niveau des liens pour ajouter des pièces jointes de modules complémentaires pour en savoir plus.Inclus dans l'iFrame de mise à niveau de l'association.
Paramètres liés à la connexion
Le paramètre de requête login_hint
fournit des informations sur l'utilisateur Classroom qui consulte la page Web du module complémentaire. Ce paramètre de requête est fourni dans l'URL src
de l'iFrame. Il est envoyé lorsque l'utilisateur a déjà utilisé votre module complémentaire pour réduire les frictions lors de la connexion de l'utilisateur final. Vous devez gérer ce paramètre de requête dans l'implémentation de votre module complémentaire.
- Indice de connexion
login_hint
est un identifiant unique pour le compte Google de l'utilisateur. Une fois que l'utilisateur s'est connecté à votre module complémentaire pour la première fois, le paramètrelogin_hint
est transmis à chaque visite ultérieure du même utilisateur.Le paramètre
login_hint
peut être utilisé de deux manières :- Transmettez la valeur
login_hint
lors du flux d'authentification afin que l'utilisateur n'ait pas besoin de saisir ses identifiants lorsque la boîte de dialogue de connexion s'affiche. L'utilisateur n'est pas connecté automatiquement. - Une fois l'utilisateur connecté, utilisez ce paramètre pour comparer la valeur à celle des utilisateurs déjà connectés au module complémentaire. Si vous trouvez une correspondance, vous pouvez laisser l'utilisateur connecté et éviter d'afficher un flux de connexion. Si le paramètre ne correspond à aucun de vos utilisateurs connectés, invitez l'utilisateur à se connecter avec un bouton de connexion à la marque Google.
Inclus avec tous les iFrames.
- Transmettez la valeur
iFrame de découverte des pièces jointes
Dimension | Description |
---|---|
Obligatoire | Oui |
URI | Fourni dans les métadonnées du module complémentaire |
Paramètres de requête | courseId , itemId , itemType ,
addOnToken et login_hint . |
Hauteur | 80 % de la hauteur de la fenêtre moins 60 px pour l'en-tête supérieur |
Largeur | Maximum de 1 600 px 90 % de la largeur de la fenêtre lorsque la fenêtre est inférieure ou égale à 600 px de large 80 % de la largeur de la fenêtre lorsque la fenêtre est supérieure à 600 px de large |
Exemple de scénario de découverte de pièces jointes
- Un module complémentaire Classroom est enregistré dans Google Workspace Marketplace avec un URI de découverte des pièces jointes
https://example.com/addon
. - Un enseignant installe ce module complémentaire et crée une annonce, un devoir ou un support dans l'un de ses cours. Par exemple,
itemId=234
,itemType=courseWork
etcourseId=123
. - Lors de la configuration de cet élément, l'enseignant choisit le module complémentaire nouvellement installé comme pièce jointe.
- Classroom crée un iFrame avec l'URL src définie sur
https://example.com/addon?courseId=123&itemId=234&itemType=courseWork&addOnToken=456
.- L'enseignant effectue une action dans l'iFrame pour sélectionner une pièce jointe.
- Lorsque l'utilisateur sélectionne une pièce jointe, le module complémentaire envoie un
postMessage
à Classroom pour fermer l'iframe.
iFrames teacherViewUri et studentViewUri
Dimension | Description |
---|---|
Obligatoire | Oui |
URI | teacherViewUri ou studentViewUri |
Paramètres de requête | courseId , itemId , itemType ,
attachmentId et login_hint . |
Hauteur | 100 % de la hauteur de la fenêtre moins 140 px pour l'en-tête supérieur |
Largeur | 100 % de la largeur de la fenêtre |
iframe studentWorkReviewUri
Dimension | Description |
---|---|
Obligatoire | Non (indique s'il s'agit d'une pièce jointe de type activité) |
URI | studentWorkReviewUri |
Paramètres de requête | courseId , itemId , itemType ,
attachmentId , submissionId et login_hint . |
Hauteur | 100 % de la hauteur de la fenêtre moins 168 px pour l'en-tête supérieur |
Largeur | 100 % de la largeur de la fenêtre moins la largeur de la barre latérale<> La barre latérale mesure 312 px lorsqu'elle est développée et 56 px lorsqu'elle est réduite. |
iFrame de mise à niveau du lien
Dimension | Description |
---|---|
Obligatoire | Oui, si votre module complémentaire est compatible avec la conversion des liens en pièces jointes de modules complémentaires. |
URI | Fourni dans les métadonnées du module complémentaire |
Paramètres de requête | courseId , itemId , itemType ,
addOnToken , urlToUpgrade et login_hint . |
Hauteur | 80 % de la hauteur de la fenêtre moins 60 px pour l'en-tête supérieur |
Largeur | Maximum de 1 600 px 90 % de la largeur de la fenêtre lorsque la fenêtre est inférieure ou égale à 600 px de large 80 % de la largeur de la fenêtre lorsque la fenêtre est supérieure à 600 px de large |
Exemple de scénario de mise à niveau de l'association
- Un module complémentaire Classroom est enregistré avec un URI de mise à niveau du lien
https://example.com/upgrade
. Vous avez fourni les préfixes d'hôte et de chemin d'accès suivants pour les pièces jointes de liens que Classroom doit tenter de convertir en pièces jointes de modules complémentaires :- L'hôte est
example.com
et le préfixe de chemin est/quiz
.
- L'hôte est
- Un enseignant crée une annonce, un devoir ou un support de cours dans l'un de ses cours. Par exemple,
itemId=234
,itemType=courseWork
etcourseId=123
. - Un enseignant colle un lien,
https://example.com/quiz/5678
, dans la boîte de dialogue "Ajouter un lien" qui correspond à un format d'URL que vous avez fourni. L'enseignant est ensuite invité à convertir le lien en pièce jointe de module complémentaire. Classroom lance l'iFrame de mise à niveau de l'association avec l'URL définie sur
https://example.com/upgrade?courseId=123&itemId=234&itemType=courseWork&addOnToken=456&urlToUpgrade=https%3A%2F%2Fexample.com%2Fquiz%2F5678
.Vous évaluez les paramètres de requête transmis sur l'iFrame et appelez le point de terminaison
CreateAddOnAttachment
. Notez que le paramètre de requêteurlToUpgrade
est encodé en URI lorsqu'il est transmis à l'iframe. Vous devez décoder le paramètre pour l'obtenir dans sa forme d'origine. JavaScript, par exemple, propose la fonctiondecodeURIComponent()
.Une fois la pièce jointe du module complémentaire créée à partir d'un lien, vous envoyez un
postMessage
à Classroom pour fermer l'iframe.
Fermer l'iFrame
L'iframe peut être fermé à partir de l'outil d'apprentissage en envoyant un postMessage
avec la charge utile {type: 'Classroom', action: 'closeIframe'}
.
Classroom n'accepte ce postMessage
que depuis le nom d'hôte et le port correspondant à l'URI d'origine qui a été ouvert.
<button id="close">Send message to close iframe</button>
<script>
document.querySelector('#close')
.addEventListener('click', () => {
window.parent.postMessage({
type: 'Classroom',
action: 'closeIframe',
}, '*');
});
</script>
Fermer l'iFrame depuis l'iFrame
Le domaine et le port de la page qui envoie l'événement postMessage
doivent être identiques à ceux de l'URI utilisé pour lancer l'iFrame. Sinon, le message est ignoré. Une solution consiste à rediriger l'utilisateur vers une page du domaine d'origine qui ne fait rien d'autre que d'envoyer l'événement postMessage
.
Fermer l'iFrame à partir d'un nouvel onglet
Les protections interdomaines empêchent cela. Une solution de contournement consiste à gérer vous-même les communications entre l'iframe et le nouvel onglet, et à laisser l'iframe responsable de l'émission de l'événement de fermeture postMessage
. En aparté, le lien hypertexte "Ouvrir dans le nom du partenaire" est supprimé afin que les utilisateurs ne créent pas d'onglets de cette manière dans un avenir proche.
Restrictions
Tous les iFrames sont ouverts avec les attributs sandbox suivants :
allow-popups
allow-popups-to-escape-sandbox
allow-forms
allow-scripts
allow-storage-access-by-user-activation
allow-same-origin
et la règle de fonctionnalité suivante :
allow="microphone *"
Blocage des cookies tiers
Sachez que le blocage des cookies tiers rend difficile le maintien d'une session connectée dans un iFrame. Consultez https://www.cookiestatus.com pour connaître l'état actuel du blocage des cookies dans différents navigateurs. Bien sûr, ce problème n'est pas propre aux modules complémentaires Google Classroom et affecte tous les sites Web qui utilisent des iFrames tiers. Beaucoup de nos partenaires ont déjà rencontré ce problème.
Voici quelques solutions générales :
- Ouvrez un nouvel onglet pour créer le cookie dans un contexte first party. Certains navigateurs autorisent l'accès aux cookies créés dans un contexte propriétaire lorsqu'ils se trouvent dans un contexte tiers.
- Demandez à l'utilisateur d'autoriser les cookies tiers. Il est possible que cela ne soit pas toujours possible avec tous les utilisateurs.
- Concevez des applications Web monopages qui ne dépendent pas des cookies.
D'autres restrictions concernant les cookies sont prévues dans les futures versions des navigateurs. Créez des demandes de fonctionnalités pour envoyer des commentaires à Google sur la façon de réduire l'impact requis par les partenaires.
Activer la détectabilité des modules complémentaires à l'aide d'expressions régulières d'URL
Les enseignants créent souvent des devoirs avec des pièces jointes de liens. Pour promouvoir l'utilisation de votre module complémentaire, vous pouvez spécifier des expressions régulières qui correspondent aux URL des ressources accessibles dans votre module complémentaire. Un enseignant qui associe un lien correspondant à l'une de vos expressions régulières voit une boîte de dialogue qu'il peut fermer et qui l'encourage à essayer votre module complémentaire. La boîte de dialogue ne s'affiche que si le module complémentaire est déjà installé pour leur compte.
Si vous souhaitez proposer ce comportement aux enseignants, fournissez les expressions régulières appropriées à vos contacts Google. Si les expressions régulières que vous fournissez sont trop larges ou entrent en conflit avec un autre module complémentaire, elles peuvent être modifiées pour être plus restrictives ou distinctes.
Figure 1. Un enseignant sélectionne un lien en pièce jointe pour un nouveau devoir.
Figure 2 : Un enseignant colle un lien provenant d'une source tierce. L'enseignant a déjà installé le module complémentaire Classroom du tiers.
Figure 3 : Boîte de dialogue interactive présentée à l'enseignant lorsque le lien collé correspond à une expression régulière spécifiée par le développeur tiers.
Si un enseignant sélectionne "Essayer maintenant" dans le pop-up illustré à la figure 3, il est redirigé vers l'iFrame de découverte des pièces jointes de votre module complémentaire.