Open edX LMS Integration Guide

1. Configuring Open edX

The integration of OctoProctor's proctoring system with Open edX is carried out using IMS LTI technology.

1.1. SSL certificate

A valid SSL certificate must be installed on the web server for Open edX pages to open over HTTPS. This is a requirement of the browser security policy, which does not allow access to the camera and microphone over an unsecured HTTP protocol.

A free Let's Encrypt SSL certificate can be issued. You can check the validity of the certificate on the server using SSLChecker.com.

1.2. Opening pages in IFRAME

The assessment page opens in the proctoring system's IFRAME after a proctoring session is started. In order for the page to open correctly in IFRAME on the Open edX web server, the Content-Security-Policy and X-Frame-Options headers on the assessment pages must be properly configured (or not passed at all). Chrome 80+ also made changes to the Set-Cookie policy, which for cross-domain cookies requires the addition of two parameters "SameSite=None" and "Secure".

In this tutorial, the browser's cross-domain security policy restriction is bypassed by placing the SDK code on the Open edX course page. It is therefore not necessary to change the web server settings.

2. Setting up course elements

2.1. LTI tools configuration

Before using the LTI proctoring tool in a course, the LTI tools must be enabled in Open edX Studio. A full description of LTI settings can be found in the edX documentation.

To enable LTI tools in Studio, you need to do the following:

  1. In the main menu open "Settings" → "Advanced Settings".

    "Settings" → "Advanced Settings"
    "Settings" → "Advanced Settings"

  2. In the field "Advanced Module List" add an element "lti_consumer", if you have multiple elements please separate them using comma symbols.

    "lti_consumer"
    "lti_consumer"

  3. Save your settings using the button "Save Changes".

2.2. LTI keys configuration

Proctoring requires the transmission of authentication data (client key and secret key). These data are issued for each proctoring server where LTI integration is used and must be specified in the Studio settings.

The authentication parameters of the external LTI tool are specified as follows:

  1. From the main menu, go to "Settings" → "Advanced Settings".
  2. In the field "LTI Passports" specify your LTI keys using the format ["your_lti_id:client_key:client_secret"], where:
    • your_lti_id — passport identifier (for example, "proctordu_lti", which is required to be specified when you add an LTI instrument to a course);
    • client_key — customer key (this is issued for a proctoring server separately);
    • client_secret — customer secret (this is issued for each proctoring server separately).
  3. Example: ["octoproctor_lti:demo:secret"]

    "LTI Passports"
    "LTI Passports"

  4. Save your settings using the button "Save Changes".

2.3. Placing the SDK on the course page

The proctoring system opens course pages in IFRAME after running a proctoring session. To get around the browser security policy restrictions (cross-domain policy) associated with opening Open edX pages in IFRAME within proctoring, you need to run proctoring and Open edX on the same domain. To do this, you need to place the proctoring startup code (SDK) on one of the course pages. This can be done as follows:

  1. From the main menu, go to "Content" → "Pages & Resources".

    "Content" → "Pages & Resources”
    "Content" → "Pages & Resources”

  2. On the "Pages & Resources" view, press the "Custom pages" button to add a new page.

    "Custom pages”
    "Custom pages”

  3. Open the page editor with the "EDIT" button.

  4. Go to the editor settings with the "SETTINGS" button and specify the following values:

    "Custom pages settings”
    "Custom pages settings”

    • Display Name – the name of the page to be displayed, you can name it "Proctoring".
    • Editor – the editor mode, select "Raw" to be able to insert HTML markup.
    • Hide Page From Learners – to hide the page from the course menu for learners, however the page will be accessible via a direct link, you must select "True".
  5. Save the settings with the "Save" button.

  6. In the page editor, insert the code to connect the proctoring SDK:

NOTE: You need to replace "demo.proctoring.app" with the domain of your proctoring server.

  1. Save the changes to the page with the "Save" button.
  2. Save the direct link to the page you have created, you will need it when setting up the LTI tool. To do this, switch to "View Live" mode (Staff role), open the "Proctoring" page and copy the link from the address bar of your browser.

    "View Live" mode - "Proctoring”
    "View Live" mode - "Proctoring”

  3. Convert this link to URL Encoding, you can do this online here. The result should be a string like this:

    Original link: https://your-edx-server/courses/course-v1:edX+DemoX+Demo_Course/f282cfc230d04a14b31ac42df22daa1b/

    Encoded link: https%3A%2F%2Fyour-edx-server%2Fcourses%2Fcourse-v1%3AedX%2BDemoX%2BDemo_Course%2Ff282cfc230d04a14b31ac42df22daa1b%2F

    2.4. Setting up the proctoring element

    1. Add a new element to the course that will use the LTI proctoring tool.
      Course page
      Course page
  4. Select "Advanced" from the options in the new component selection menu.

    Choosing a component type
    Choosing a component type

  5. Select "LTI Consumer" from the options provided.

    LTI
    LTI

  6. Press "EDIT" on the settings panel of the LTI Consumer unit.

    "EDIT"
    "EDIT"

  7. Next, in the component editor, fill in the fields as described:

    Component Editor
    Component Editor

    • LTI Version — LTI version, select "LTI 1.1/1.2".
    • LTI ID — previously specified identifier in "LTI Passports", e.g: "octoproctor_lti".
    • LTI URL — LTI tool page in using the format below: https://demo.proctoring.app/api/auth/edx?redirect=``*<sdk-url>* where "demo.proctoring.app" — your proctoring server domain name, "<sdk-url>" — the encoded link to the SDK code page that was previously created.
    • Custom Parameters — proctoring session parameters in "KEY=VALUE" format (separated by commas if there are several parameters): ["url=https://your-edx-server/path/to/quiz","template=default"] url — the address of the assessment page (test), which can be found by going into View Live mode (Learner role) to the desired section of the course and copying the link from the browser address bar; (this parameter can be omitted if the URL is specified in the proctoring session template); template — Proctor session template identifier, which can be configured via the proctoring admin panel.
    • LTI Launch Target — the way LTI content is displayed, you need to select "New Window".
    • Scored — to receive an LTI rating for an instrument, you must select "True".
    • When you have finished making the settings, press "Save".
    • Publish the changes with the "Publish" button.

    2.5. Restrict access to the assessment item

It is usually necessary to limit the availability of the assessment item until the proctoring session is started. So that the participant cannot open the contents of the assessment item before the start of the proctoring session.

Access to the assessment item is restricted
Access to the assessment item is restricted

To do this, the following settings must be made in Studio (see documentation for a full description of the settings):

  1. Include Subsection Prerequisites:
    • Go to the main menu, Settings → Advanced Settings.
    • Set the "Enable Subsection Prerequisites" field to "true".
    • Save the settings with the "Save Changes" button.
  2. Place the proctoring element (LTI tool) in the same section as the assessment item, placing it in front of it.
  3. Go to the proctoring element settings (LTI tool).

    Proctoring element settings
    Proctoring element settings

  4. Enable the option "Make this subsection available as a prerequisite for other content" in the "Advanced" tab.

  5. Save the settings with the "Save" button.
  6. Go to the "Advanced" tab in the assessment item settings.

    "Advanced" tab in the assessment item settings
    "Advanced" tab in the assessment item settings

  7. Specify the following parameters:

    • Select the name of the proctoring item from the "Prerequisite" drop-down list.
    • Specify in the "Minimum Score" field: 100%
    • Specify in the "Minimum Completion" field: 100%
  8. Save the settings with the "Save" button.

2.6. Using proctoring

On the page of the proctoring item (LTI tool), users will see a button which, when clicked, will open the proctoring system page in the adjacent tab.

The page of the proctoring item
The page of the proctoring item

Users with the test-taker role will enter the proctoring session, where the assessment item page that was specified in the LTI tool settings in the user parameter "url" (or specified in the session template through the proctoring admin) will open in IFRAME.

Users with the role of instructor or administrator will enter the proctor's interface, where they can observe sessions of a given assessment and view protocols.

3. Configuring a self deployed proctoring host

To connect the integration API with Open edX, you need to load the following config with integration parameters under the proctoring system manager:

JSON

{
  "id": "<Host_ID>",
  "key": "<License_Key>",
  "params": {
    "webhooks": {
      "edx": {
        "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": {
          "score": "1"
        },
        "stop": {
          "score": "0"
        },
        "pause": {
          "score": "0"
        },
        "submit": {
          "score": "room.conclusion?(room.conclusion==='positive'?0.999:0):Math.min((room.score||0)/100, 0.999)"
        }
      }
    }
  }
}

NOTE: the fields "consumerKey" and "consumerSecret" need to be replaced with a randomly generated sequence of characters (Latin letters of different case and numbers, the recommended length is 24 characters); "id" is the ID of the host (if you do not specify it, a new host will be created); "key" is the license key of this host.