Интеграция с Open edX
1. Настройка сервера Open edX
Интеграция системы прокторинга ProctorEdu с Open edX осуществляется по стандарту IMS LTI.
1.1 SSL-сертификат
На веб-сервере должен быть установлен валидный SSL-сертификат, чтобы страницы Open edX открывались по протоколу HTTPS. Это требование политики безопасности браузера, которая не позволяет получить доступ к камере и микрофону по незащищенному протоколу HTTP.
Можно выпустить бесплатный SSL-сертификат Let’s Encrypt. Проверить валидность сертификата на сервере можно с помощью сервиса SSLChecker.com.
Можно выпустить бесплатный SSL-сертификат Let’s Encrypt. Проверить валидность сертификата на сервере можно с помощью сервиса SSLChecker.com.
1.2 Открытие страниц в IFRAME
Страница экзамена (теста) открывается в IFRAME системы прокторинга после запуска сеанса прокторинга. Чтобы страница корректно открылась в IFRAME на веб-сервере Open edX требуется правильно настроить заголовки Content-Security-Policy и X-Frame-Options на страницах теста (либо не передавать эти заголовки вообще). Также в Chrome 80+ внесены изменения в политику установки файлов куки Set-Cookie, которая для кросс-доменных куков требует добавить два параметра "SameSite=None" и "Secure".
В данной инструкции обход ограничения кросс-доменной политики безопасности браузера осуществляется путем размещения кода SDK на странице курса Open edX. Поэтому менять настройки веб-сервера не требуется.
В данной инструкции обход ограничения кросс-доменной политики безопасности браузера осуществляется путем размещения кода SDK на странице курса Open edX. Поэтому менять настройки веб-сервера не требуется.
2. Настройка прокторинга в курсе
2.1 Включение LTI инструментов
Прежде чем использовать в курсах LTI инструмент прокторинга, необходимо включить LTI инструменты в Студии (Studio) Open edX. Полное описание настроек LTI приведено в документации edX.
Для включения LTI инструментов в Студии нужно:
1) В главном меню откройте раздел "Settings" > "Advanced Settings".
Для включения LTI инструментов в Студии нужно:
1) В главном меню откройте раздел "Settings" > "Advanced Settings".
2) В поле "Advanced Module List" добавьте элемент "lti_consumer", если элементов несколько, то они разделяются запятой.
3) Сохраните настройки кнопкой "Save Changes".
2.2 Настройка ключей LTI
Для работы прокторинга требуется передача аутентификационных данных (ключа клиента и секретного ключа). Эти данные выдаются для каждого сервера прокторинга, где используется интеграция LTI, и их нужно указать в настройках Студии.
Параметры аутентификации внешнего инструмента LTI указываются следующим образом:
1) В главном меню откройте раздел "Settings" > "Advanced Settings".
2) В поле "LTI Passports" укажите ключи LTI в формате ["your_lti_id:client_key:client_secret"], где:
Например: ["proctoredu_lti:demo:secret"]
Параметры аутентификации внешнего инструмента LTI указываются следующим образом:
1) В главном меню откройте раздел "Settings" > "Advanced Settings".
2) В поле "LTI Passports" укажите ключи LTI в формате ["your_lti_id:client_key:client_secret"], где:
- your_lti_id — идентификатор паспорта (например, "proctordu_lti", который потребуется указать при добавлении LTI инструмента в курс;
- client_key — ключ клиента (выдается для сервера прокторинга);
- client_secret — секретный ключ (выдается отдельно для каждого сервера прокторинга).
Например: ["proctoredu_lti:demo:secret"]
3) Сохраните настройки кнопкой "Save Changes".
2.3 Размещение SDK на странице курса
Система прокторинга открывает страницы курса в IFRAME после запуска сессии прокторинга. Чтобы обойти ограничения политики безопасности браузера (кросс-доменная политика), связанные с открытием страниц Open edX в IFRAME внутри прокторинга, необходимо запускать прокторинг и Open edX на одном домене. Для этого нужно разместить код запуска прокторинга (SDK) на одной из страниц курса. Сделать это можно следующим образом:
1) В главном меню откройте раздел "Content" > "Pages".
2) В разделе "Pages" нажмите кнопку "Add a New Page", чтобы добавить новую страницу.
3) Откройте редактор страницы кнопкой "EDIT".
4) Зайдите в настройки редактора кнопкой "SETTINGS" и укажите следующие значения:
4) Зайдите в настройки редактора кнопкой "SETTINGS" и укажите следующие значения:
- Display Name — отображаемое название страницы, можно назвать "Proctoring".
- Editor — режим работы редактора, нужно выбрать "Raw", чтобы можно было вставлять HTML-разметку.
- Hide Page From Learners — скрыть страницу из меню курса для учеников, однако страница будет доступна по прямой ссылке,нужно выбрать "True".
5) Сохраните настройки кнопкой "Save".
6) В редакторе страницы вставьте код для подключения SDK прокторинга:
6) В редакторе страницы вставьте код для подключения SDK прокторинга:
<script src="https://demo.proctoring.online/sdk/supervisor.js" data-supervisor="start"></script>
Вместо "demo.proctoring.online" укажите домен вашего сервера прокторинга.
7) Сохраните изменения страницы кнопкой "Save".
8) Сохраните прямую ссылку на созданную страницу, она понадобится при настройке LTI инструмента. Для этого перейдите в режим "View Live" (роль "Staff"), откройте страницу "Proctoring" и скопируйте ссылку из строки адреса браузера.
7) Сохраните изменения страницы кнопкой "Save".
8) Сохраните прямую ссылку на созданную страницу, она понадобится при настройке LTI инструмента. Для этого перейдите в режим "View Live" (роль "Staff"), откройте страницу "Proctoring" и скопируйте ссылку из строки адреса браузера.
9) Преобразуйте полученную ссылку в кодировку URL Encoding, это можно сделать онлайн тут. В результате должна получиться строка подобного вида:
Оригинальная ссылка:
https://demo.openedx.overhang.io/courses/course-v1:edX+DemoX+Demo_Course/f282cfc230d04a14b31ac42df22daa1b/
Закодированная ссылка:
https%3A%2F%2Fdemo.openedx.overhang.io%2Fcourses%2Fcourse-v1%3AedX%2BDemoX%2BDemo_Course%2Ff282cfc230d04a14b31ac42df22daa1b%2F
Оригинальная ссылка:
https://demo.openedx.overhang.io/courses/course-v1:edX+DemoX+Demo_Course/f282cfc230d04a14b31ac42df22daa1b/
Закодированная ссылка:
https%3A%2F%2Fdemo.openedx.overhang.io%2Fcourses%2Fcourse-v1%3AedX%2BDemoX%2BDemo_Course%2Ff282cfc230d04a14b31ac42df22daa1b%2F
2.4 Настройка элемента прокторинга
1) Добавьте в курс новый элемент, в котором будет использоваться LTI инструмент прокторинга.
2) Выберите "Advanced" из предложенных вариантов в меню выбора нового
3) Выберите "LTI Consumer" из предложенных вариантов.
4) Нажмите "EDIT" на панели настроек блока "LTI Consumer".
5) Далее, в редакторе компонентов, заполните поля согласно описанию.
- LTI Version — версия LTI, нужно выбрать "LTI 1.1/1.2".
- LTI ID — ранее указанный идентификатор в "LTI Passports", например: "proctoredu_lti".
- LTI URL — страница LTI инструмента в формате "https:///api/auth/?redirect=", где — домен вашего сервера прокторинга, — название провайдера интеграции, — закодированная ссылка на страницу с кодом SDK, которая была создана ранее.
- Custom Parameters — параметры сессии прокторинга в формате "КЛЮЧ=ЗНАЧЕНИЕ" (через запятую, если несколько параметров): ["url=https://your-edx-server/path/to/quiz","template=default"], где url — адрес страницы экзамена (теста), узнать ее можно перейдя в режиме "View Live" (роль "Learner") в нужный раздел курса и скопировав ссылку из строки адреса браузера; (этот параметр можно не указывать, если URL указан в шаблоне сеанса прокторинга); template — идентификатор шаблона сеанса прокторинга, который настраивается через админку прокторинга.
- LTI Launch Target — способ отображения LTI контента, нужно выбрать "New Window" (новое окно).
- Scored — получать оценку LTI инструмента, нужно выбрать "True" (да).
6) После завершения настройки нажмите "Save".
7) Опубликуйте изменения кнопкой "Publish".
7) Опубликуйте изменения кнопкой "Publish".
2.5 Ограничение доступа к тестовому элементу
Обычно требуется ограничить доступность тестового элемента до момента, пока прокторинг не будет запущен. Чтобы участник не смог открыть содержимое тестового элемента до начала сессии прокторинга.
Для этого в Студии нужно выполнить следующие настройки (полное описание настроек приведено в документации):
1) Включите предварительные условия подраздела (Subsection Prerequisites):
3) Зайдите в настройки элемента прокторинга (инструмент LTI).
- В главном меню откройте раздел "Settings" > "Advanced Settings".
- В поле "Enable Subsection Prerequisites" укажите значение "true".
- Сохраните настройки кнопкой "Save Changes".
3) Зайдите в настройки элемента прокторинга (инструмент LTI).
4) Включите опцию "Make this subsection available as a prerequisite to other content" на вкладке "Advanced".
5) Сохраните настройки кнопкой "Save".
6) Зайдите в настройки тестового элемента на вкладку "Advanced".
5) Сохраните настройки кнопкой "Save".
6) Зайдите в настройки тестового элемента на вкладку "Advanced".
7) Укажите следующие параметры:
- Выберите в выпадающем списке "Prerequisite" название элемента прокторинга.
- Укажите в поле "Minimum Score": 0%
- Укажите в поле "Minimum Completion": 100%
2.6 Использование прокторинга
На странице элемента прокторинга (LTI инструмента) пользователи увидят кнопку, нажав на которую страница системы прокторинга откроется в соседней вкладке.
Пользователи с ролью ученика (студента) попадут в сессию прокторинга, где в IFRAME откроется страница тестового элемента, которая была указана в настройках инструмента LTI в пользовательском параметре "url" (либо указана в шаблоне сеанса через админку прокторинга).
Пользователи с ролью инструктора или администратора попадут в интерфейс проктора, где смогут наблюдать за сеансами данного экзамена и просматривать протоколы.
Пользователи с ролью инструктора или администратора попадут в интерфейс проктора, где смогут наблюдать за сеансами данного экзамена и просматривать протоколы.
3. Настройка интеграции в системе прокторинга
Чтобы подключить интеграцию с Open edX в системе прокторинга необходимо импортировать следующую конфигурацию хоста по аккаунтом менеджера:
<!--JSON-->
{
"id": "<Host_ID>",
"key": "<License_Key>",
"params": {
"webhooks": {
"openedx": {
"authorizer": "lti",
"integrator": "lti",
"consumerKey": "demo",
"consumerSecret": "secret",
"callbackURL": "query.redirect",
"profile": {
"username": "payload.user_id",
"role": "payload.roles.find(v=>/Instructor/.test(v))?'proctor':'student'",
"nickname": "payload.lis_person_name_full",
"lang": "(payload.launch_presentation_locale||'').slice(0,2)",
"group": "['G',payload.context_id,payload.resource_link_id].join('-')",
"referrer": "payload.launch_presentation_return_url",
"labels": "payload.lis_person_contact_email_primary"
},
"register": {
"identifier": "[payload.user_id,payload.context_id,payload.resource_link_id].join('-').replace(/[^A-Za-z0-9_-]+/g,'_')",
"template": "payload.custom_template||'default'",
"subject": "payload.resource_link_title",
"members": "payload.custom_members==='@'?user.group:payload.custom_members",
"url": "payload.custom_url||payload.launch_presentation_return_url",
"tags": "payload.lis_person_contact_email_primary"
},
"start": true,
"stop": true,
"pause": true,
"submit": true
}
},
"sdk": {
"iframe": {
"sandbox": "allow-scripts allow-forms allow-modals allow-same-origin allow-popups allow-downloads"
}
}
}
}где поля "consumerKey" и "consumerSecret" нужно заменить на случайно сгенерированную последовательность символов (латинские буквы разного регистра и цифры, рекомендуемая длина 24 символа); "id" — идентификатор хоста (если его не указывать, создастся новый хост); "key" — лицензионный ключ данного хоста.