diff --git a/source/_images/educator_how_tos/lti_staff_debug_button_screenshot.png b/source/_images/educator_how_tos/lti_staff_debug_button_screenshot.png new file mode 100644 index 000000000..a35d5026d Binary files /dev/null and b/source/_images/educator_how_tos/lti_staff_debug_button_screenshot.png differ diff --git a/source/_images/educator_how_tos/lti_staff_debug_info_screenshot.png b/source/_images/educator_how_tos/lti_staff_debug_info_screenshot.png new file mode 100644 index 000000000..ed6f39825 Binary files /dev/null and b/source/_images/educator_how_tos/lti_staff_debug_info_screenshot.png differ diff --git a/source/_images/site_ops_how_tos/lti_cosumer_admin_panel.png b/source/_images/site_ops_how_tos/lti_cosumer_admin_panel.png new file mode 100644 index 000000000..ee45749bf Binary files /dev/null and b/source/_images/site_ops_how_tos/lti_cosumer_admin_panel.png differ diff --git a/source/_images/site_ops_how_tos/lti_provider_section_django_panel.png b/source/_images/site_ops_how_tos/lti_provider_section_django_panel.png new file mode 100644 index 000000000..53b35c591 Binary files /dev/null and b/source/_images/site_ops_how_tos/lti_provider_section_django_panel.png differ diff --git a/source/conf.py b/source/conf.py index ee02bf843..f9be79e02 100644 --- a/source/conf.py +++ b/source/conf.py @@ -66,6 +66,12 @@ "learners/sfd_discussions/keep_up.rst": "learners/sfd_discussions/discussions_notifications.rst", "learners/sfd_discussions/provide_feedback.rst": "learners/sfd_discussions/find_follow_conversations.rst", "educators/references/course_development/working_with_targz_file.rst": "educators/how-tos/course_development/work_with_targz_file.rst", + "educators/references/advanced_features/planning_content_reuse.rst": "educators/references/advanced_features/lti_content_compatibility.rst", + "educators/concepts/advanced_features/lti_reuse_content.rst": "educators/concepts/advanced_features/using_openedx_as_LTI_provider.rst", + "educators/how-tos/advanced_features/lti_prepare_content.rst": "educators/references/advanced_features/lti_content_compatibility.rst", + "site_ops/install_configure_run_guide/configuration/lti/authentication_options_lti.rst": "site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst", + "site_ops/install_configure_run_guide/configuration/lti/settings_lti.rst": "site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst", + "site_ops/install_configure_run_guide/configuration/lti/tpa_lti.rst": "site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst", } tags_create_tags = True diff --git a/source/educators/concepts/advanced_features/lti_reuse_content.rst b/source/educators/concepts/advanced_features/lti_reuse_content.rst deleted file mode 100644 index f3bdc2f12..000000000 --- a/source/educators/concepts/advanced_features/lti_reuse_content.rst +++ /dev/null @@ -1,103 +0,0 @@ -.. _Reusing Course Content: - -Reusing Course Content with LTI -############################### - -.. tags:: educator, concept - -When you use LTI to reuse your course content, learners who are already -familiar with an external learning management system or other consumer -application (external LMS) see content from your Open edX instance that is -seamlessly integrated into a familiar context. Only the content that you -specify from your Open edX instance appears in the external LMS, typically -within an iframe on a page. - -For example, you can set up a course on an external LMS, such as Canvas, to -include a link to a problem component that is part of a course on your -instance. The problem is included as one of the course's assignments, and -appears in Canvas like other content. - -.. image:: /_images/educator_concepts/lti_canvas_example.png - :alt: An Open edX molecule builder problem shown as part of a course running - on a Canvas system. - -This section provides background information on different aspects of the -experience that learners and course team members have when interacting with -Open edX content in the context of an external LMS. - -.. contents:: - :local: - :depth: 1 - -For information about the content that you can include in an external LMS, see -:ref:`Planning for Content Reuse`. - -Course Roster Management -************************ - -Course teams manage the course roster entirely on the external LMS, as you -would for other courses that run on that platform. Learners do not use the Open -edX LMS to enroll, and the course team does not complete any enrollment -activities in Studio or the Open edX LMS. - -To obtain enrollment data for the course, you use the features available in -the external LMS. - -Learner Identification and Single Sign On -***************************************** - -Learners do not need to navigate to a different website, or sign in to any -other system (including your Open edX instance), to access content that -originates in an course in your instance. However, the first time a learner -views Open edX course content in the external LMS, she might have to re-enter -her credentials for the external LMS, even though she is already signed in to -the external LMS. - -Internally, the Open edX instance associates a unique internal identifier to -each learner's credentials to allow for a streamlined, single sign in -experience in the future. However, this separate identifier can make -some content confusing for learners when viewed in the context of an -external LMS. For example, Open edX course discussions can identify -participants by these unique IDs instead of the usernames they would normally -see in the external LMS. As a result, some Open edX content is not currently -suitable for use in an external LMS. - -For more information, see :ref:`Planning for Content Reuse`. - -Learner Progress and Grades -*************************** - -Each learner's progress through the Open edX content is saved. Learners start, -stop, and resume work in the external LMS in the same way that they would in -the Open edX LMS. - -Learner responses to Open edX problem components are graded by the Open edX -system, and then transferred automatically to the grade book in the external -LMS. For more information, see :ref:`Grading Remote Content`. - -To obtain learner engagement and performance data, you use the features -available in the external LMS. - -.. seealso:: - - - :ref:`Using Open edX as an LTI Tool Provider` (concept) - - :ref:`Create a Duplicate Course for LTI use` (how-to) - - :ref:`Determine Content Addresses` (how-to) - - :ref:`Planning for Content Reuse` (reference) - - :ref:`Open edX as an LTI Provider to Canvas` (how-to) - - :ref:`Open edX as an LTI Provider to Blackboard` (how-to) - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| | | | | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/educators/concepts/advanced_features/using_openedx_as_LTI_provider.rst b/source/educators/concepts/advanced_features/using_openedx_as_LTI_provider.rst index 9558fa563..c6f34a2ea 100644 --- a/source/educators/concepts/advanced_features/using_openedx_as_LTI_provider.rst +++ b/source/educators/concepts/advanced_features/using_openedx_as_LTI_provider.rst @@ -1,63 +1,132 @@ .. _Using Open edX as an LTI Tool Provider: -Using Open edX as an LTI Tool Provider +Your instance as an LTI Tool Provider ###################################### .. tags:: educator, concept -You can also include content from an LTI provider in your courses. For more -information, see :ref:`About the LTI Component`. +Open edX platform can act as a Learning Tools Interoperability (LTI) tool provider, allowing you to deliver Open edX course content inside +another LMS such as Canvas, Blackboard or any system that supports LTI 1.1. -.. _Grading Remote Content: +Setting this up involves 2 roles: -Grading Remote Content -********************** +**Site operator**: Enables LTI provider functionality on the Open edX instance and creates LTI 1.1 +credentials for external LMS. See :ref:`Configuring an Open edX Instance as an LTI Tool Provider` (site +operator docs). -When you include problem components from a graded subsection in your Open edX -instance in an external LMS, your Open edX instance will grade the learner -responses to those problems. Your instance then transfers the learner scores -back to the external LMS. This exchange between an external LMS, your Open edX -instance, and the external LMS again is near real time. It can take a few -moments to complete this exchange for a single problem component, and up to -several minutes to return aggregated scores of all of the problems in a unit or -subsection. +**Educator**: Identifies the Open edX course content to share, constructs LTI URLs for that content, +and adds LTI 1.1 configuration along with those URLs to the external LMS. -When you include problem components from your Open edX instance in an external -LMS, note the following requirements. -* The problem component must be in one of the graded subsections in your course. -* Your external LMS might also require that you use a specific part of the - course for graded content. For example, in Canvas, you must add the LTI URL - of a problem component to the "Assignments" section of a course, or to a - module item that points to an assignment. In addition, the user who launches - the LTI material must be eligible to get a grade for the assignment; that is, - a learner and not a TA or course designer. +Content You Can Deliver +======================= -For more information about constructing an LTI URL for a course component, see -:ref:`Determine Content Addresses`. +The Open edX software lets you deliver specific parts of a course via LTI. +You can share a :ref:`subsection `, +a :ref:`unit `, or an individual :ref:`component `. +:ref:`Sections ` are not supported. -.. seealso:: - +For details on which content types work well when delivered via LTI, see :ref:`Content Compatibility for LTI`. + + +Learner Authentication Options +============================== + +The authentication mode affects how seamlessly learners access your content and whether you +need to configure your external LMS to send learner identity information. This is configured +by your site operator. See :ref:`Authentication Modes` for the configuration steps. + +#. **Anonymous (default)**: A user account is automatically created for the learner with a + randomly generated username and email address. No personally identifiable information is + stored. This mode provides the most seamless experience and the learner may not even notice + that your Open edX instance is involved. + + Because accounts are created with randomly generated usernames and email addresses, you + cannot identify individual learners in your Open edX instance. + +#. **Auto-create with personal information**: A user account is created using the learner's + email address. If an account with that email already exists, it is linked automatically. + This mode is useful when you need to identify learners or associate their LTI activity + with an existing Open edX account. + + For this to work, configure your external LMS to include ``lis_person_contact_email_primary`` + in the LTI launch request. Without it, your Open edX instance cannot identify the learner + and will create an account using the LTI user ID instead. You can also send + ``lis_person_name_full`` (or ``lis_person_name_given`` and ``lis_person_name_family``) to + populate the learner's display name, but this is optional. + +#. **Require existing account**: The learner must already be signed into your Open edX instance + in the same browser, and their account email must match the email address your external LMS + sends in the launch request. If either condition is not met, they see an error page with a + link to the sign-in page. This mode is useful when learners must have pre-existing accounts + on your Open edX instance. + + For this to work, configure your external LMS to include ``lis_person_contact_email_primary`` + in the LTI launch request. Without it, the email match fails and the learner sees the error + page, regardless of whether they are signed in. + + +Grading +======= + +When you include problem components from a graded subsection in an external LMS, the Open edX software grades +the learner responses and transfers the scores back to the external LMS. + +If the content is an individual problem component, the Open edX instance returns the grade for each learner +immediately after they submit an answer. + +If the content is a unit or subsection, the Open edX instance aggregates the grades and returns them after a +configurable delay (15 minutes by default). - :ref:`Create a Duplicate Course for LTI use` (how-to) +.. note:: - :ref:`Determine Content Addresses` (how-to) + Your external LMS may have additional requirements for grading to work. For example, in Canvas, + the LTI URL of a problem component must be added to the Assignments section of a course, or to + a module item that points to an assignment. - :ref:`Planning for Content Reuse` (reference) + Or the user who launches the LTI material must be eligible to receive a grade (that is, a learner, + not a TA or course designer). - :ref:`Open edX as an LTI Provider to Canvas` (how-to) +What You Need from Your Site Operator +===================================== - :ref:`Open edX as an LTI Provider to Blackboard` (how-to) +Before you can configure your external LMS to consume Open edX content, you need the following +from your site operator: - :ref:`Configuring an edX Instance as an LTI Tool Provider` (site operators) +#. Consumer key: A unique identifier for the external LMS. Your site operator creates this when + configuring the LTI consumer in Django admin. + +#. Consumer secret: A shared secret used to authenticate the LTI connection. Created alongside the + consumer key. + +You will enter these values into your external LMS when setting up the LTI integration. In +addition, you will need the LTI URL for each piece of Open edX content you want to deliver. +You'll need to construct these yourself using the course ID and usage ID. See :ref:`Determine Content Addresses`. + + +.. note:: + + Not all Open edX content types work well when delivered via LTI. For details on which component types are + compatible, see :ref:`Content Compatibility for LTI`. + + + +.. seealso:: + + :ref:`Content Compatibility for LTI` (reference) + + :ref:`Determine Content Addresses` (how-to) + + :ref:`Configuring an Open edX Instance as an LTI Tool Provider` (concept) - :ref:`Configuring Credentials for a Tool Consumer` (site operators) **Maintenance chart** +--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | +| Review Date | Reviewer | Release |Test situation | +--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | MITx | Teak | Pass | +| 2026-05-06 | Aamir Ayub | Verawood | Pass | +--------------+-------------------------------+----------------+--------------------------------+ +| 2025-06-04 | MITx | Teak | Pass | ++--------------+-------------------------------+----------------+--------------------------------+ \ No newline at end of file diff --git a/source/educators/how-tos/advanced_features/lti_blackboard_example.rst b/source/educators/how-tos/advanced_features/lti_blackboard_example.rst index 50e496762..a015c37ce 100644 --- a/source/educators/how-tos/advanced_features/lti_blackboard_example.rst +++ b/source/educators/how-tos/advanced_features/lti_blackboard_example.rst @@ -48,11 +48,9 @@ To use Open edX course content in the Blackboard LMS, you add a new app to the c :ref:`Using Open edX as an LTI Tool Provider` (concept) - :ref:`Create a Duplicate Course for LTI use` (how-to) - :ref:`Determine Content Addresses when using Open edX as an LTI Provider` (how-to) - :ref:`Planning for Content Reuse (LTI)` (reference) + :ref:`Content Compatibility for LTI` (reference) :ref:`Example - Open edX as an LTI Provider to Canvas` (reference) diff --git a/source/educators/how-tos/advanced_features/lti_canvas_example.rst b/source/educators/how-tos/advanced_features/lti_canvas_example.rst index ba1214369..a54449ab6 100644 --- a/source/educators/how-tos/advanced_features/lti_canvas_example.rst +++ b/source/educators/how-tos/advanced_features/lti_canvas_example.rst @@ -37,11 +37,9 @@ To use Open edX course content in the Canvas LMS, you add a new app to the cours :ref:`Using Open edX as an LTI Tool Provider` (concept) - :ref:`Create a Duplicate Course for LTI use` (how-to) - :ref:`Determine Content Addresses when using Open edX as an LTI Provider` (how-to) - :ref:`Planning for Content Reuse (LTI)` (reference) + :ref:`Content Compatibility for LTI` (reference) :ref:`Example - edX as an LTI Provider to Blackboard` (how-to) diff --git a/source/educators/how-tos/advanced_features/lti_determine_content_address.rst b/source/educators/how-tos/advanced_features/lti_determine_content_address.rst index 835bacee6..30aa6a6c8 100644 --- a/source/educators/how-tos/advanced_features/lti_determine_content_address.rst +++ b/source/educators/how-tos/advanced_features/lti_determine_content_address.rst @@ -1,79 +1,62 @@ .. _Determine Content Addresses: -Determine Content Addresses when using Open edX as an LTI Provider -####################################################################### +Determine LTI Content Addresses +################################ .. tags:: educator, how-to -To include the content of an existing course in another system, you use the Open edX -LMS to find the location identifiers for the content you want to include. You -then format the identifiers into an LTI URL. +To include Open edX course content in another system, you construct an LTI URL that identifies the +specific content. This URL combines a course ID and a usage ID that you find in the Open edX LMS. .. contents:: :local: :depth: 2 -You might find using a tool like a spreadsheet helpful as a way to organize the -course ID and each of the usage IDs that correspond to the course content you -want to include in an external LMS. - -See the :ref:`MITx LTI Converter Tool` section below for a handy way of -generating these LTI URLs. - -.. _Find the Course ID: +You might find using a spreadsheet helpful to organize the course ID and usage IDs for the content +you want to include. Find the Course ID -******************** - -The identifier for your course can be in one of these formats. - -* ``{key type}:{org}+{course}+{run}``, for example, - ``course-v1:OpenedX+DemoX+2024`` +****************** -* ``{org}/{course}/{run}`` (for courses created prior to 2015), for example, ``OpenedX/DemoX/2014`` +The course ID has the format ``{key type}:{org}+{course}+{run}``, for example, +``course-v1:OpenedX+DemoX+2024``. -Courses created since Fall 2014 typically have an ID that uses the first -format, while older courses have IDs that use the second format. - -To find the course ID for your course, follow these steps. +To find the course ID: #. In your Open edX LMS, open your course. #. In the URL shown by your browser, find the course ID. -For example, you open the "Open edX Demo Course" course to the **Course** -page for the course. The URL for the **Course** page is -``https://apps.training.openedx.io/catalog/courses/course-v1:OpenedX+DemoX+Demo_Course/about``. From -the URL, you determine that the course ID is ``course-v1:OpenedX+DemoX+Demo_Course``. + For example, the URL + ``https://openedx.io/learning/course/course-v1:OpenedX+DemoX+DemoCourse/home`` + contains the course ID ``course-v1:OpenedX+DemoX+DemoCourse``. The same course ID applies to every item of content in the course. -.. _Finding the Usage ID for Course Content: +.. note:: + + Courses created before Fall 2014 may use an older format: ``{org}/{course}/{run}``, + for example, ``OpenedX/DemoX/2014``. -Finding the Usage ID for Course Content -**************************************** +Find Usage ID for Content +************************* -The identifier for a specific component, unit, or subsection in your course can -be in one of these formats. +The usage ID identifies a specific component, unit, or subsection. It has the format -* ``{key type}:{org}+{course}+{run}+type@{type}+block@{display name}``, for - example, ``block-v1:OpenedX+DemoX+Demo_Course+type@sequential+block@basic_questions`` +``{key type}:{course ID}+type@{type}+block@{block ID}`` -* ``i4x:;_;_{org};_{course};_{type};_{display name}``, for example, - ``i4x:;_;_OpenedX;_DemoX;_sequential;_basic_questions`` +For example, ``block-v1:OpenedX+DemoX+DemoCourse+type@html+block@d4e2624ae8b3479db698413bd8947b6f`` -Courses created since Fall 2014 typically have usage IDs in the first format, -while older courses have usage IDs in the second format. +You must have the :ref:`Staff or Admin role ` in a course to find usage IDs. -The following terms are used in the usage identifiers to indicate subsections, -units, and components. +These terms in the usage ID indicate the level of the content: .. list-table:: :widths: 45 45 :header-rows: 1 - * - Studio - - Page Source + * - Studio term + - Usage ID term * - subsection - sequential * - unit @@ -81,174 +64,102 @@ units, and components. * - component - problem, html, or video -The example usage IDs shown above include the word "sequential", so they -indicate subsections in a course. - -Several methods are available to help you find the usage IDs for items in your -course. +.. note:: -To find the usage ID for a unit or a component in the LMS, you can use -either of these methods. + Courses created before Fall 2014 may use an older usage ID format: + ``i4x:;_;_{org};_{course};_{type};_{display name}``. -* :ref:`View staff debug info` for the - unit or component. - -* :ref:`View the page source` for the - unit or component. - -To find the usage ID for a subsection, you -:ref:`view the page source`. - -.. note:: You must have the Staff or Admin role in a course to follow these - procedures for finding usage IDs. - -.. _View Staff Debug Info for the Usage ID: - -View Staff Debug Info for the Usage ID -========================================== - -To find the usage ID for a unit or component in the LMS, follow these steps. +Find Usage ID of Unit or Component +================================== #. In your Open edX LMS, open the course. -#. Select **Course**, and then go to the page that contains the unit or - component. - -#. Select **Staff Debug Info**. +#. Go to the page that contains the unit or component. -#. To find the usage ID for a component, find the **location**. +#. Click on :guilabel:`STAFF DEBUG INFO`. - For example, ``location = block-v1:OpenedX+DemoX+Demo_Course+type@html+block@054cef851ecc415e969cd82c06a3307b`` + .. figure:: /_images/educator_how_tos/lti_staff_debug_button_screenshot.png + :alt: STAFF DEBUG INFO button on the unit page. + :width: 60% -#. To find the usage ID for a unit, scroll down to find the **parent**. + Staff Debug Info button is located at the end of every component on the unit page. - For example, ``parent block-v1:OpenedX+DemoX+Demo_Course+type@vertical+block@7be7c1ea72f94d08b8bca998aa81f898`` +#. Usage ID of a component is the value of the ``location`` field. -The usage ID value begins with ``block-v1`` for newer courses or ``i4x://`` for -older courses. If you are using a spreadsheet to organize your location -identifiers, you can select the usage ID value, and then copy and paste it into -the spreadsheet. +#. Usage ID of a unit is the value of the ``parent`` field. -To close the Staff Debug viewer, click on the browser page outside of the -viewer. + .. figure:: /_images/educator_how_tos/lti_staff_debug_info_screenshot.png + :alt: Screenshot of STAFF DEBUG INFO modal. + :width: 60% -For more information, see :ref:`Guide to Staff Debug Info`. + Staff Debug Info modal showing the location and parent fields. -.. _View the Page Source for the Usage ID: +The usage ID begins with ``block-v1``. -View the Page Source for the Usage ID -========================================== +.. note:: For courses created before Fall 2014, the usage ID begins with ``i4x://``. -To find the usage ID for a subsection, unit, or component, you view the -HTML page source for that page of the course. -To find the usage ID for a subsection, unit, or component, follow these steps. - -#. In your Open edX LMS, open your course. - -#. Select **Course**, and then go to the page with the content that you - want to include in an external LMS. - -#. Open the HTML source for the page. For example, in a Chrome browser you - right click on the page, and then select **View Page Source**. - -#. Use your browser's Find feature to locate the term ``data-usage-id``. This - attribute contains the usage ID. - ..note:: This step needs review because is not working in the last versions of the Open edX platform. - -#. Review the value for the usage id to determine the part of the course it - identifies: the sequential (subsection), a unit (vertical) or a specific - component (problem, html, or video). - - .. important:: You might need to search beyond the first match to retrieve - the usage ID for the content you want to identify. Be sure to check the - ``data-usage-id`` for sequential, vertical, or problem, html, or video to - be sure that you specify the content that you want. -For example, you want to link to a subsection in the Open edX Demo course. You open -the course, go to the problem, and then right click to view the page source. -When you search for ``data-usage-id``, the first match is -``block-v1:OpenedX+DemoX+Demo_Course+type@sequential+block@basic_questions``. You -verify that this usage ID value is for the subsection by checking for the -presence of ``sequential``. -If you are using a spreadsheet to organize your location identifiers, you can -select the usage ID value within the quotation marks or ``"`` ISO codes, -and then copy and paste it into the spreadsheet. +Find Usage ID of Subsection +=========================== +While you are on a unit of the relevant subsection, copy the url. Here's an example: -Constructing the LTI URL -************************ +.. code-block:: text -To identify the edX content that you want to include in an external LMS, you -provide its URL. This URL has the following format. + https://openedx.io/learning/course/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@sequential+block@f5c59ce5928f42f4af485e187a93963e/block-v1:OpenedX+DemoX+DemoCourse+type@vertical+block@619390d971ba4e6e8b150417e3730d7e - ``https://{host}/lti_provider/courses/{course_id}/{usage_id}`` +Here's what the format of this example URL is: -To construct the LTI URL, you add your course ID and the specific content ID. +``https://openedx.io/learning/course/{course ID}/{usage ID of subsection}/{usage ID of unit}`` -Examples of the possible formats for an LTI URL follow. +So the usage ID of the subsection is in the URL. -LTI URLs for a subsection include "sequential", as follows. +Construct the LTI URL +********************* - ``https://openedx-lti.org/lti_provider/courses/course-v1:OpenedX+01-2024+2024-1/block-v1:OpenedX+01-2024+2024-1+type@sequential+block@4e1de5e13fc3422997fe246b40a43aa1/block-v1:OpenedX+01-2024+2024-1+type@vertical+block@78b75020d3894fdfa8b4994f97275294`` +The LTI URL has the following format: -LTI URLs for a unit include "vertical", as follows. +``https://{host}/lti_provider/courses/{course_id}/{usage_id}`` - ``https://openedx-lti.org/lti_provider/courses/course-v1:OpenedX+01-2024+2024-1/block-v1:OpenedX+01-2024+2024-1+type@vertical+block@78b75020d3894fdfa8b4994f97275294`` +Examples: -LTI URLs for Text components include "html+block" or "html", as follows. +Subsection (sequential): - ``https://openedx-lti.org/lti_provider/courses/course-v1:OpenedX+01-2024+2024-1/block-v1:OpenedX+01-2024+2024-1+type@html+block@f9f3a25e7bab46e583fd1fbbd7a2f6a0`` +.. code-block:: text + https://openedx.io/lti_provider/courses/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@sequential+block@f5c59ce5928f42f4af485e187a93963e -.. _MITx LTI Converter Tool: +Unit (vertical): -MITx LTI Converter Tool -************************ +.. code-block:: text -Kaleb Abebe at MITx has created a useful online tool for generating LTI URLs. -This will work for any site, not just MITx, and has been provided by Kaleb for -community usage. + https://openedx.io/lti_provider/courses/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@vertical+block@619390d971ba4e6e8b150417e3730d7e -#. Visit the `MITx-Canvas URL Converter - `_ (`source code here - `_) +Text component (html): -#. Copy the full site URL for the content you want to use for LTI reuse, for - example, - ``https://apps.teak.demo.edly.io/learning/course/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@sequential+block@f5c59ce5928f42f4af485e187a93963e/block-v1:OpenedX+DemoX+DemoCourse+type@vertical+block@a3ada3c77ab74014aa620f3c494e5558`` +.. code-block:: text -#. Paste these URLs into the tool, one per line. + https://openedx.io/lti_provider/courses/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@html+block@d4e2624ae8b3479db698413bd8947b6f -#. Click :guilabel:`Convert` to generate the new URLs for use in Canvas or - another LTI provider. You will get a result such as - ``https://apps.teak.demo.edly.io/lti_provider/courses/course-v1:OpenedX+DemoX+DemoCourse/block-v1:OpenedX+DemoX+DemoCourse+type@vertical+block@a3ada3c77ab74014aa620f3c494e5558``. - -#. Copy the converted URLs and use them in :ref:`Canvas ` or another LTI consumer. .. seealso:: - - - :ref:`Using Open edX as an LTI Tool Provider` (concept) - - :ref:`Create a Duplicate Course for LTI use` (how-to) - - :ref:`Planning for Content Reuse (LTI) ` (reference) - :ref:`Example - Open edX as an LTI Provider to Canvas ` (reference) - - :ref:`Example - edX as an LTI Provider to Blackboard Provider ` (reference) + :ref:`Using Open edX as an LTI Tool Provider` (concept) + :ref:`Content Compatibility for LTI` (reference) + :ref:`Configuring an Open edX Instance as an LTI Tool Provider` (concept) **Maintenance chart** +--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | +| Review Date | Reviewer | Release |Test situation | +--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | MITx | Teak | Pass | +| 2026-05-06 | Aamir Ayub | Verawood | Pass | +--------------+-------------------------------+----------------+--------------------------------+ +| 2025-06-04 | MITx | Teak | Pass | ++--------------+-------------------------------+----------------+--------------------------------+ \ No newline at end of file diff --git a/source/educators/how-tos/advanced_features/lti_prepare_content.rst b/source/educators/how-tos/advanced_features/lti_prepare_content.rst deleted file mode 100644 index 4177bab3e..000000000 --- a/source/educators/how-tos/advanced_features/lti_prepare_content.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. _Create a Duplicate Course for LTI use: - -Create a Duplicate Course for LTI use -###################################### - -.. tags:: educator, how-to - -Before you create a duplicate course, be sure to check with your DevOps team -to determine the website that hosts your organization's courses for LTI use. - -To create the duplicate course, follow these steps. - -#. In Studio, export the original course. For more information, see - :ref:`Export a Course`. - -#. In Studio on your organization's host site for LTI courses, create a course. - This is the duplicate course. - - .. note:: If your organization uses the same site as the host for both the - original course and for LTI courses, be sure to give the duplicate course a - different name or run. - -#. In the duplicate course, import the tar.gz file you exported in step 1. - For more information, see :ref:`Import a Course`. - - -Verify Content Status -******************************* - -Only the published course content from your Open edX instance appears in an external LMS. - -.. note:: The **Hide from students** setting for sections, subsections, - and units does not affect the visibility of content in an external LMS. Only - the publication status of a unit can prevent content from being included. - -To verify that all of the content in your course is published, follow these -steps. - -#. In Studio, from the **Content** menu select **Outline**. The **Course - Outline** page opens. - -#. Expand each section and subsection. - -#. Locate units with *Unpublished units will not be released* or *Unpublished - changes to live content* below the unit name. - -#. For each unpublished unit, make any changes that are necessary to prepare - the content for publication. Alternatively, delete the unit. - -#. Publish the unit. For more information, see :ref:`Publish a Unit`. - -.. seealso:: - - - :ref:`Using Open edX as an LTI Tool Provider` (concept) - - :ref:`Determine Content Addresses when using Open edX as an LTI Provider` (how-to) - - :ref:`Planning for Content Reuse (LTI)` (reference) - - :ref:`Open edX as an LTI Provider to Canvas` (how-to) - - :ref:`Open edX as an LTI Provider to Blackboard` (how-to) - - - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | MITx | Teak | Pass | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/educators/navigation/advanced_features.rst b/source/educators/navigation/advanced_features.rst index 5dccb9982..73eab65d5 100644 --- a/source/educators/navigation/advanced_features.rst +++ b/source/educators/navigation/advanced_features.rst @@ -83,12 +83,10 @@ Use Open edX as an LTI Tool Provider :glob: ../concepts/advanced_features/using_openedx_as_LTI_provider.rst - ../concepts/advanced_features/lti_reuse_content.rst - ../references/advanced_features/planning_content_reuse.rst - ../how-tos/advanced_features/lti_prepare_content.rst + ../references/advanced_features/lti_content_compatibility.rst ../how-tos/advanced_features/lti_determine_content_address.rst ../how-tos/advanced_features/lti_canvas_example.rst - ../how-tos/advanced_features/lti_blackboard_example.rst + ../how-tos/advanced_features/lti_blackboard_example.rst Offering Badges diff --git a/source/educators/references/advanced_features/lti_content_compatibility.rst b/source/educators/references/advanced_features/lti_content_compatibility.rst new file mode 100644 index 000000000..c4067a3b5 --- /dev/null +++ b/source/educators/references/advanced_features/lti_content_compatibility.rst @@ -0,0 +1,80 @@ +.. _Content Compatibility for LTI: + +Content Compatibility for LTI +############################## + +.. tags:: educator, reference + +Not all Open edX content types and features work well when delivered via Learning Tools Interoperability (LTI) to an external +LMS. This table summarizes compatibility. + +.. list-table:: + :widths: 45 45 + :header-rows: 1 + + * - Course Content or Feature + - Works Well with LTI? + * - Problem Components + - Yes (in new window, not in iframe) + * - Text Components + - Yes + * - Video Components + - Yes + * - Annotation Problem Components + - No + * - Cohorts + - No + * - Content Experiment Components + - No + * - Course-wide Discussions + - No + * - Discussion Components + - No + * - Internal Links + - No + * - Randomized Content Block Problem Components + - No + +Considerations +************** + +When selecting content to deliver via LTI, keep these points in mind: + +* Only published content appears in an external LMS. + +* Content appears in the external LMS regardless of the start, end, or enrollment dates + defined in the Open edX course. This ensures uninterrupted availability. + +* The external LMS does not respect the "Hide from students" visibility setting. If it is selected, + the content will not appear in the learner view of your Open edX instance. However, it will be + visible to learners accessing the content via the external LMS. + +* Problem components work only when opened in a new window, not in an iframe. If your external LMS + embeds LTI content in an iframe by default, learners will not be able to interact with problem + components. Check your external LMS settings for an option to open LTI content in a new window. + +* Discussion components can be confusing for learners in an LTI context because learners may be + identified by internally assigned IDs rather than their usernames. Consider using the discussion + features in your external LMS instead. + +* Features that create groups of learners based on their IDs, such as content experiments and + cohorts, are not designed for external use. Set up these features in your external LMS if you + need them. + + + +.. seealso:: + + :ref:`Using Open edX as an LTI Tool Provider` (concept) + + :ref:`Determine Content Addresses` (how-to) + +**Maintenance chart** + ++--------------+-------------------------------+----------------+--------------------------------+ +| Review Date | Reviewer | Release |Test situation | ++--------------+-------------------------------+----------------+--------------------------------+ +| 2026-05-06 | Aamir Ayub | Verawood | Pass | ++--------------+-------------------------------+----------------+--------------------------------+ +| 2025-06-04 | MITx | Teak | Pass | ++--------------+-------------------------------+----------------+--------------------------------+ \ No newline at end of file diff --git a/source/educators/references/advanced_features/planning_content_reuse.rst b/source/educators/references/advanced_features/planning_content_reuse.rst deleted file mode 100644 index b176865ec..000000000 --- a/source/educators/references/advanced_features/planning_content_reuse.rst +++ /dev/null @@ -1,119 +0,0 @@ -.. _Planning for Content Reuse: - -Planning for Content Reuse (LTI) -################################ - -.. tags:: educator, reference - -Before you begin work to reuse the content in an Open edX course, check with -your development operations (DevOps) team for information about the -website to use. At some sites, a completely separate Open edX instance, with -a different Studio website, is set up to be the LTI tool provider. - -When you create links to course content in your external LMS, you can link -to components individually, to all of the content in a unit, or to all of the -content in a subsection. - -As you plan which parts of the course you want to reuse, note the following -considerations. - -* Some content can be confusing to learners when it appears in the context - of an external LMS. For example, in some configurations, Open edX course discussion identify learners by their internally assigned IDs instead of - by their usernames. Rather than linking to a subsection or unit that contains - discussion components, you could plan to either link only to specific - components or remove the discussion components from the unit or subsection, - and then use the features available in your external LMS to add discussion - forums to the course. - -* Optional course features that create groups of learners based on their - IDs, such as content experiments and cohorts, are not designed to provide - results for external use. To use features like these for your course, you - should plan to set them up in the external LMS. - -* To ensure that the content remains available without interruption, the course - content appears in the external LMS regardless of the start, end, or - enrollment dates that are defined for the course in the Open edX instance. - -* To ensure that learners see only content that is ready for use, only - course content that is published appears in an external LMS. - -For more information about features that might not be suitable for use with -LTI, see :ref:`Select Content in the Duplicate Course`. - -The topics that follow assume use of the Open edX Studio user interface. However, -you can also complete these tasks by exporting the course and then reviewing or -editing its XML before you import. - -.. _Select Content in the Duplicate Course: - -Select Content in the Duplicate Course -*************************************** - -To select content in your duplicate Open edX course for reuse in an external LMS, -you use Studio to review the course outline and make note of the components, -units, and subsections you want to include. - -Using an organizational tool, such as a spreadsheet, can be helpful. For -example, you can use a spreadsheet column to identify the type of content (for -example, component, unit, subsection), and add their display names to the next -column. Additional columns can contain the values that you use to construct the -addresses for your LTI links. For more information about addressing content, -see :ref:`Determine Content Addresses`. - -Optionally, you can streamline the contents of units and subsections by -removing components, or disable course features that you do not plan to use. - -.. list-table:: - :widths: 45 45 - :header-rows: 1 - - * - Course Content or Feature - - Works Well with LTI? - * - Annotation Problem Components - - No - * - Cohorts - - No - * - Content Experiment Components - - No - * - Course-wide Discussions - - No - * - Discussion Components - - No - * - Text Components - - Yes - * - Internal Links - - No - * - Problem Components - - Yes - * - Randomized Content Block Problem Components - - No - * - Video Components - - Yes - -.. check on randomized content blocks, that's an assumption - Alison 22 Aug 15 - -For information about removing components, see :ref:`Delete a Component`. For -information about disabling cohorts, see :ref:`Disabling the Cohort Feature`. -To remove course-wide discussions, you select **Settings**, and then **Advanced -Settings**, and then delete the contents of the **Discussion Topic Mapping** -policy key. For more information, see :ref:`Create CourseWide Discussion -Topics`. - -.. seealso:: - - - :ref:`Using Open edX as an LTI Tool Provider` (concept) - - :ref:`Create a Duplicate Course for LTI use` (how-to) - - :ref:`Determine Content Addresses when using Open edX as an LTI Provider` (how-to) - - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | MITx | Teak | Pass | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/site_ops/install_configure_run_guide/configuration/index.rst b/source/site_ops/install_configure_run_guide/configuration/index.rst index 2ee81793f..7d595ded3 100644 --- a/source/site_ops/install_configure_run_guide/configuration/index.rst +++ b/source/site_ops/install_configure_run_guide/configuration/index.rst @@ -30,6 +30,8 @@ configuration options. enable_licensing transcripts lti/index + lti/enable_lti + lti/configure_lti enable_socialsharing_icons password tpa/index diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/authentication_options_lti.rst b/source/site_ops/install_configure_run_guide/configuration/lti/authentication_options_lti.rst deleted file mode 100644 index ebde2d623..000000000 --- a/source/site_ops/install_configure_run_guide/configuration/lti/authentication_options_lti.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. _Options for LTI Authentication and User Provisioning: - -######################################################## -Options for LTI Authentication and User Provisioning -######################################################## - -.. tags:: site operator - -When you use your Open edX system as an LTI tool provider, data is collected by -the Open edX system for all learner activity. Each learner has a user account -on the Open edX system that is linked to the user account on the tool consumer -system, so that activity, grades, and state can be passed from one system to -the other. - -The Open edX system supports these user authentication flows for LTI. - -.. contents:: - :local: - :depth: 1 - -.. _Anonymous User Authentication: - -****************************** -Anonymous User Authentication -****************************** - -The first time a learner encounters an Open edX resource in a course, the -Open edX content is immediately launched by a POST to the URL. Without -requiring any action from the learner, the Open edX system creates a user -account and provisions it with a system-generated username, and links it to -the tool consumer user account for that learner. Learners never interact with -the Open edX system directly. - -This authentication flow presents a virtually seamless experience that -significantly reduces user error. The Open edX system passes learner data to -the tool consumer with no subsequent reconciliation of data between the -systems. - -After you :ref:`configure your edX instance as an LTI tool provider`, no further configuration is needed -on your Open edX system for this user authentication flow. - -****************************** -Open edX User Authentication -****************************** - -The first time a learner encounters an Open edX resource in a course, he is -prompted to either sign in with existing credentials or create a user account. -The Open edX system creates a user account and provisions it with the supplied -values, and links it to the tool consumer user account for that learner. The -POST to the URL then delivers the Open edX resource in the tool consumer. After -the initial sign in or account creation step, learners do not interact with the -Open edX system directly. - -In this authentication flow, learners knowingly establish or use credentials on -the Open edX system. This flow provides a smooth learner experience that can -also satisfy legal requirements or privacy concerns. - -After you configure your edX instance as an LTI tool provider, you can -:ref:`configure Open edX user authentication` between your Open edX system and the tool consumer. - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| | | | | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst b/source/site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst index c1ece63c2..502691234 100644 --- a/source/site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst +++ b/source/site_ops/install_configure_run_guide/configuration/lti/configure_lti.rst @@ -1,115 +1,189 @@ .. _Configuring Credentials for a Tool Consumer: ############################################################### -Configuring Credentials for a Tool Consumer +Configuring LTI Consumers ############################################################### -.. tags:: site operator +.. tags:: site operator, how-to -For each external learning management system or application (external LMS) that -you want to allow access to your edX instances as an LTI tool consumer, you -create OAuth1 credentials, and then configure your edX instance to allow -access. Each external LMS that you :ref:`configure as a tool consumer -` must have separate credentials. +For each external LMS that will consume content from your Open edX +instance, you must create a Learning Tools Interoperability (LTI) consumer record in the Django admin. +Each external LMS must have its own separate record. +.. contents:: + :local: + :depth: 1 -After you complete the configuration of a tool consumer on your edX system, you -can add the consumer credentials to your external LMS. For examples of how -course teams might set up a course on an external LMS as a consumer of edX -course content, see :ref:`Using Open edX as an LTI Tool -Provider` in the *Building and Running an Open edX Course* guide. +***************************** +Create a Consumer Record +***************************** -.. _Configure the Tool Consumer: +#. Sign in to the Django administration console at + ``https://{your_lms_domain}/admin``. -********************************* -Configure the Tool Consumer -********************************* +#. Under `LTI Provider`, select :guilabel:`Add` next to `LTI Consumers`. -To configure an LTI tool consumer to have access to your Open edX installation, -follow these steps. +#. Fill in the fields: -#. Sign in to the Django administration console for your base URL. For example, - ``http://{your_URL}/admin``. + - `Consumer Name`: A label identifying this external LMS. -#. In the **LTI Provider** section, next to **LTI Consumers** select - **Add**. + - `Consumer Key`: A unique identifier for this consumer. Generated + automatically but you can also supply your own. -#. Enter the following information. + - `Consumer Secret`: A secret used to sign LTI requests. + Generated automatically but you can also supply your own. - - **Consumer Name**: An identifying name for the tool consumer. + .. important:: - - **Consumer Key**: The console generates a unique key value for this - tool consumer. Alternatively, you can use an external application to - generate the key, and then enter it here. + Leave `Instance GUID` blank. The external LMS generates and + supplies this value on its first LTI launch. - - **Consumer Secret**: The console generates a unique secret value for this - tool consumer. Alternatively, you can use an external application to - generate the secret, and then enter it here. + - `Require user account` and `Use lti pii`: These checkboxes + control how Open edX associates learners with accounts. See + :ref:`Authentication Modes` below before deciding which to enable. - .. important:: - Do not supply a value for the **Instance guid** field. The - tool consumer generates and supplies a globally unique identifier. +#. Select :guilabel:`Save`. - - **Require User Account**: Checking this makes the content available only - for the learners who already have an account on the Open edX instance. This - is useful when learners need to be linked between different LMS systems. +#. Share the `Consumer Key` and `Consumer Secret` with the educator + or administrator who will configure the external LMS. - By default, :ref:`an anonymous Open edX system user` - is created and all the data is associated with that user. This flag - can be used when it is desirable to associate the data, generated - via LTI interactions, to actual learner accounts instead of an - anonymous account. When this is checked, instead of creating an - anonymous user automatically, a message requesting the learner to sign - into Open edX is displayed on the first LTI launch and the content - is presented after a successful sign in. +.. _Authentication Modes: - .. important:: - The account linking happens only when the LTI Consumer sends the - learners' email to Open edX by setting the POST data attribute - ``lis_person_contact_email_primary`` in the LTI Launch request. - This feature has only been tested with **Canvas LMS**, with privacy - setting set to "Email Only" or "Public". +***************************** +Authentication Modes +***************************** - With this flag checked, the LTI content embedded in iframes will require - the following Django configuration. +When a learner launches LTI content for the first time, your Open edX instance +must associate them with a user account. The two checkboxes, "Require user account" +and "Use lti pii", on the consumer record control how this happens. You can choose +to use the "Anonymous (default)" mode, the "Auto-Create with Personal Information" +mode or the "Require Existing Account" mode. - .. code-block:: python +.. figure:: /_images/site_ops_how_tos/lti_cosumer_admin_panel.png + :alt: Screenshot of add LTI Consumer page showing *Require user account* and *Use lti pii* checkboxes. + :width: 100% - # Needed for passing user session with the LTI Request - SESSION_COOKIE_SAMESITE = 'None' - SESSION_COOKIE_SECURE = True - SESSION_COOKIE_SAMESITE_FORCE_ALL = True - CSRF_COOKIE_SECURE = True - CSRF_COOKIE_SAMESITE = 'None' + *Require User Account* and *Use LTI PII* checkboxes on the add LTI Consumer page in Django admin panel. - # Needed for showing pages in iframe - X_FRAME_OPTIONS = "ALLOW-FROM " +Anonymous (default) +=================== +To enable this mode, leave both `Require user Account` and `Use lti pii` +unchecked. - Caveats: - - Setting this flag only associates future interactions of the learner. - This flag cannot be used to migrate data from existing anonymous accounts - to corresponding user accounts. - - Unchecking the flag will not roll back the auto-linked users. In - situations requiring rollback of this feature, it is recommended - to create a new LTI Consumer with this flag turned off, and the - new credentials be used in the LTI consumer application. +Your Open edX instance will automatically create an account with a +randomly generated username and email address. The learner sees no +login prompt and the content loads immediately. This account is linked +to the learner's identity in the external LMS for grade passback. +Use this mode when you want the most seamless learner experience. + +Auto-Create with Personal Information +====================================== + +To enable this mode, check `Use LTI PII`. + +Your Open edX instance will use the learner's email address and full name from the LTI +launch request (``lis_person_contact_email_primary``, +``lis_person_name_full``) to create their account. If an account with +that email already exists, it is linked automatically instead of +creating a new one. + +Use this mode when you need to associate LTI activity with real learner +identities or with accounts that already exist on your Open edX instance. + +The external LMS must be configured to send ``lis_person_contact_email_primary`` +in the launch request. This has been tested with Canvas LMS with the +privacy setting set to "Email Only" or "Public". + +Require Existing Account +======================== + +To enable this mode, check `Require user account`. + +On the learner's first LTI launch, your Open edX instance checks two conditions: + +- The learner is already signed into your Open edX instance in the same browser. +- Their account email matches ``lis_person_contact_email_primary`` + sent by the external LMS. + +If either condition is not met, the learner sees an error page with a +link to the your instance's sign-in page (Authn MFE). After signing in with the matching +account, they can return to the content. + +.. important:: + + The external LMS must be configured to send + ``lis_person_contact_email_primary``. Without it, this check always + fails, regardless of whether the learner is signed in. + +This check runs only on the first launch per learner. Once their identities have been linked, +subsequent launches proceed without the check. + +Use this mode when learners must have pre-existing accounts on your +Open edX instance and you want activity tied to those accounts. + +.. note:: + + If both `Require User Account` and `Use LTI PII` are checked, + `Require User Account` takes precedence. + +Delivering Content in an iframe with Require User Account +--------------------------------------------------------- + +When this option is checked and content is embedded in an iframe, browsers +may block the session cookie. The required cookie and frame settings are +already included in the Tutor plugin described in +:ref:`Enable LTI Provider Functionality`. Make sure to replace +```` in the ``X_FRAME_OPTIONS`` setting with +your actual LTI consumer domain. + + +***************************** +Caveats +***************************** + +- Enabling `Require User Account` only affects future LTI launches. + Existing anonymous account data is not migrated. +- Disabling `Require User Account` after it has been enabled does not + unlink accounts. + +***************************** +Grade Aggregation Delay +***************************** + +When the external LMS links to a unit or subsection (rather than a +single problem), the Open edX software aggregates grades across all problems before +passing them back. Individual problem components return grades +immediately. The delay applies only to unit and subsection level links. + +The default aggregation interval is 15 minutes. To change it, add the +following to your Tutor plugin under ``openedx-lms-common-settings``: + +.. code-block:: python + + LTI_AGGREGATE_SCORE_PASSBACK_DELAY = 15 * 60 # seconds + +Replace ``15 * 60`` with your desired interval in seconds. -#. Select **Save** at the bottom of the page. .. seealso:: - :ref:`Configuring an edX Instance as an LTI Tool Provider` + :ref:`Configuring an Open edX Instance as an LTI Tool Provider` (concept) + + :ref:`Enable LTI Provider Functionality` (how-to) + :ref:`Using Open edX as an LTI Tool Provider` (concept) **Maintenance chart** +--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | +| Review Date | Reviewer | Release |Test situation | ++--------------+-------------------------------+----------------+--------------------------------+ +| 2026-05-06 | Aamir Ayub | Verawood | Pass | +--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | OpenCraft | Teak | Pass | +| 2025-06-04 | MITx | Teak | Pass | +--------------+-------------------------------+----------------+--------------------------------+ -.. include:: /links.txt \ No newline at end of file +.. include:: /links.txt diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/enable_lti.rst b/source/site_ops/install_configure_run_guide/configuration/lti/enable_lti.rst index ae6941bf1..f80ea9eed 100644 --- a/source/site_ops/install_configure_run_guide/configuration/lti/enable_lti.rst +++ b/source/site_ops/install_configure_run_guide/configuration/lti/enable_lti.rst @@ -4,47 +4,118 @@ Enable LTI Provider Functionality ################################################# -.. tags:: site operator +.. tags:: site operator, how-to -LTI provider functionality is provided in the ``lti_provider`` app, located in -``edx-platform/lms/djangoapps/lti_provider``. +The Learning Tools Interoperability (LTI) provider feature is included in Open edX but is disabled by +default. The recommended way to enable it on a Tutor-based installation +is to install a Tutor plugin. See `Creating a Tutor Plugin `_. -By default, the ``lti_provider`` app is not used by edX installations. To -enable this functionality throughout the platform, follow these steps. +***************************** +Create the Tutor Plugin +***************************** -#. In the ``edx/app/edxapp/lms.yml`` file, edit the file so that it - includes the following line in the features section. +Create a file named ``enable_lti_provider.py`` (for example, +``~/.local/share/tutor-plugins/enable_lti_provider.py``) with the +following content: - .. code-block:: none +.. code-block:: python - "FEATURES" : { - ... - "ENABLE_LTI_PROVIDER": true - } + """ + Tutor plugin: enable-lti-provider + Sets ENABLE_LTI_PROVIDER = True in the edx-platform LMS and CMS settings. + """ + import textwrap -#. Save the ``edx/app/edxapp/lms.yml`` file. + from tutor import hooks -#. Run database migrations. + ######################################## + # Plugin metadata + ######################################## -#. Restart the LMS server. + __version__ = "1.0.0" + name = "enable-lti-provider" -To verify that the LTI provider functionality is enabled, you can check for the -presence of the following database tables. + ######################################## + # LMS common settings patch + ######################################## -:: + hooks.Filters.ENV_PATCHES.add_item( + ( + "openedx-lms-common-settings", + textwrap.dedent(""" + # Enable LTI Provider feature + FEATURES['ENABLE_LTI_PROVIDER'] = True + ENABLE_LTI_PROVIDER = True + INSTALLED_APPS.append('lms.djangoapps.lti_provider.apps.LtiProviderConfig') + AUTHENTICATION_BACKENDS.append('lms.djangoapps.lti_provider.users.LtiBackend') + SESSION_COOKIE_SAMESITE = 'None' + SESSION_COOKIE_SECURE = True + SESSION_COOKIE_SAMESITE_FORCE_ALL = True + CSRF_COOKIE_SECURE = True + CSRF_COOKIE_SAMESITE = 'None' + X_FRAME_OPTIONS = "ALLOW-FROM " + """), - lti_provider_gradedassignment - lti_provider_lticonsumer - lti_provider_ltiuser - lti_provider_outcomeservice + ) + ) -If these tables are not present, check that the migrations have run properly. + ######################################## + # CMS common settings patch + # (optional but keeps both services in sync) + ######################################## + + hooks.Filters.ENV_PATCHES.add_item( + ( + "openedx-cms-common-settings", + """ + # Enable LTI Provider feature + FEATURES['ENABLE_LTI_PROVIDER'] = True + ENABLE_LTI_PROVIDER = True + """, + ) + ) + + +You need to enable the plugin, restart your instance and run database migrations as described +in `Tutor documentation `_. + +.. important:: + + If you plan to deliver content in an iframe, replace ```` + in the ``X_FRAME_OPTIONS`` setting with your actual LTI consumer domain. If you are + not using iframe delivery, you can remove that line. + + + +***************************** +Verify the Installation +***************************** + +Confirm the LTI provider is active by looking for the `LTI Provider` section in Django admin panel. + +.. figure:: /_images/site_ops_how_tos/lti_provider_section_django_panel.png + :alt: Screenshot of LTI Provider section in the Django admin panel. + :width: 100% + + LTI Provider section should appear in Django admin panel once the feature is active. + +If its not visible, check that the migration step completed +without errors. + + +.. seealso:: + + :ref:`Configuring an Open edX Instance as an LTI Tool Provider` (concept) + + :ref:`Configuring Credentials for a Tool Consumer` (how-to) **Maintenance chart** +--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | +| Review Date | Reviewer | Release |Test situation | ++--------------+-------------------------------+----------------+--------------------------------+ +| 2026-05-06 | Aamir Ayub | Verawood | Pass | +--------------+-------------------------------+----------------+--------------------------------+ -| | | | | +| 2025-06-04 | MITx | Teak | Pass | +--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/index.rst b/source/site_ops/install_configure_run_guide/configuration/lti/index.rst index 9764c66c2..3a19ff818 100644 --- a/source/site_ops/install_configure_run_guide/configuration/lti/index.rst +++ b/source/site_ops/install_configure_run_guide/configuration/lti/index.rst @@ -1,46 +1,39 @@ -.. _Configuring an edX Instance as an LTI Tool Provider: +.. _Configuring an Open edX Instance as an LTI Tool Provider: ######################################################## -Configuring an edX Instance as an LTI Tool Provider +Configuring your Open edX as an LTI Tool Provider ######################################################## -.. tags:: site operator +.. tags:: site operator, concept -You can configure your Open edX instance to be a learning tool interoperability -(LTI) provider to other systems and applications. You can use this LTI -capability to present content from an Open edX course in any application that is -configured to be a consumer of that content. After you enable your edX instance -as an LTI tool provider and configure credentials for the tool consumers, -course teams can reuse course content from the edX instance in contexts other -than the edX LMS. +You can configure your Open edX instance to act as a Learning Tools +Interoperability (LTI) 1.1 tool provider, serving course content inside external learning management +systems such as Canvas or Blackboard. -.. toctree:: - :maxdepth: 1 +Setting this up involves two tasks: - enable_lti - configure_lti - settings_lti - authentication_options_lti - tpa_lti +#. :ref:`Enable the LTI provider feature` + on your Open edX instance. +#. :ref:`Create LTI consumer credentials` + for each external LMS that will consume your content. -For more information and examples of how course teams might set up a course on -an external LMS as a consumer of edX course content, see -:ref:`Using Open edX as an LTI Tool Provider` in the *Building -and Running an Open edX Course* guide. +Once configured, course teams can construct LTI URLs for specific pieces +of content and add them to the external LMS. See +:ref:`Using Open edX as an LTI Tool Provider` for the educator-facing steps. .. seealso:: - :ref:`Configuring Credentials for a Tool Consumer` - - :ref:`Using Open edX as an LTI Tool Provider` + :ref:`Using Open edX as an LTI Tool Provider` (concept) **Maintenance chart** +--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | +| Review Date | Reviewer | Release |Test situation | ++--------------+-------------------------------+----------------+--------------------------------+ +| 2026-05-06 | Aamir Ayub | Verawood | Pass | +--------------+-------------------------------+----------------+--------------------------------+ -| 2025-06-04 | OpenCraft | Teak | Pass | +| 2025-06-04 | MITx | Teak | Pass | +--------------+-------------------------------+----------------+--------------------------------+ -.. include:: /links.txt \ No newline at end of file +.. include:: /links.txt diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/settings_lti.rst b/source/site_ops/install_configure_run_guide/configuration/lti/settings_lti.rst deleted file mode 100644 index 3e2ad2af2..000000000 --- a/source/site_ops/install_configure_run_guide/configuration/lti/settings_lti.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _Define Interval for Grade Aggregation: - -#################################################### -Define an Interval for Grade Aggregation (Optional) -#################################################### - -.. tags:: site operator - -When an external LMS links to problem components in a graded edX subsection, -the edX system grades the answers to those problems, and then transfers the -grades back to the external LMS. - -* If the link is to an individual problem component on the edX system, the edX - system returns the grade for each learner immediately. - -* If the link is to a unit or subsection, you can configure an interval of time - for the edX system to delay before returning the grades. The edX system - aggregates all of the problems in the unit or subsection that the learner - answers during that interval. Aggregating grades can reduce the number of - notification messages that learners receive. - -By default, the edX system aggregates grades for units and subsections every 15 -minutes. - -To change the interval for returning aggregated grades, follow these steps. - -#. In ``edx/app/edxapp/lms.yml``, change the value for the following - parameter. - - ``LTI_AGGREGATE_SCORE_PASSBACK_DELAY = 15 * 60`` - - You specify a time value in seconds. - -#. Save the ``/lms/envs/common.py`` file. - -#. Restart the Learning Management System processes so that the - updated environment configurations are loaded. - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| | | | | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/site_ops/install_configure_run_guide/configuration/lti/tpa_lti.rst b/source/site_ops/install_configure_run_guide/configuration/lti/tpa_lti.rst deleted file mode 100644 index 9cb3de7be..000000000 --- a/source/site_ops/install_configure_run_guide/configuration/lti/tpa_lti.rst +++ /dev/null @@ -1,146 +0,0 @@ -.. _Configuring Open edX for LTI Authentication: - -############################################################### -Configuring Open edX User Authentication for LTI -############################################################### - -.. tags:: site operator - -Every learner who accesses content on an Open edX system must have a user -account. The Open edX system uses the accounts to collect data for learner -interactions with course content. - -After you :ref:`configure your edX instance as an LTI tool provider`, you can configure Open edX user -authentication between your Open edX installation and an LTI tool consumer. - -For more information about the authentication flows that are available, see -:ref:`Options for LTI Authentication and User Provisioning`. - -.. contents:: - :local: - :depth: 1 - -************************************************** -Configure Open edX User Authentication for LTI -************************************************** - -To configure Open edX user authentication between your Open edX installation -and an LTI tool consumer, follow these steps. - -.. note:: A consumer key and secret are required. The Django administration - console provides a hexadecimal string for the secret, but does not provide a - hexadecimal string for the key. You must use an external tool to generate the - key. - -#. Sign in to the Django administration console for your base URL. For example, - ``http://{your_URL}/admin``. - -#. In the **Third_Party_Auth** section, next to **Provider Configuration - (LTI)** select **Add**. - -#. Select **Enabled**. - -#. Enter the **Name** of your Open edX system, as you want it to appear on the - registration page that is presented to learners who access Open edX content - from this LTI tool consumer. - -#. To customize the registration process for learners, you can make selections - for these optional fields. - - - **Skip Registration Form**: If you select this option, users are not asked - to confirm any user account data that is supplied for them by the LTI tool - consumer (name, email address, and so on). - - By default, this option is cleared and learners review a registration form - with the account details supplied by the tool consumer. - - - **Skip Email Verification**: If you select this option, users are not - required to confirm their email addresses, and their accounts are activated - immediately upon registration. - - By default, this option is cleared and learners receive an email message - and must select a link in that message to activate their user accounts. - -6. Enter the following information. - - - **Lti consumer key**: Enter the hexadecimal string of the key. - - - **Lti consumer secret**: The system generates a hexadecimal string value - for this field. Alternatively, you can replace it with a secret generated - by an external tool. - -7. Optionally, change the default value for the **Lti max timestamp age**. - -#. Select **Save** at the bottom of the page. - -******************************************* -Test LTI Authentication -******************************************* - -To verify the sign in process for an LTI provider configuration, follow these -steps. - -#. Have the LTI consumer key and secret for the LTI provider configuration - available. For example, use the Django administration console to open the - **Change Provider Configuration (LTI)** page. - -#. Use a separate browser window or tab to open the `IMS LTI 1.1 Consumer - Launch`_ page. - -#. As the **Launch URL**, enter your base URL followed by ``/auth/login/lti/``. - For example, ``http://{your_URL}/auth/login/lti/``. - -#. Copy the **Lti consumer key** value, and then on the IMS LTI 1.1 Consumer - Launch page paste it in as the **Key**. - -#. Copy the **Lti consumer secret** value, and then on the IMS LTI 1.1 Consumer - Launch page paste it in as the **Secret**. - -#. Optionally, change the default values in the **Launch Data** section of the - **IMS LTI 1.1 Consumer Launch** page to match the set of values that the - tool consumer is configured to supply. - -#. To test the workflow for a learner who does not yet have a user account on - your Open edX system, follow these steps. - - - Use a separate browser window or tab to make sure that you are signed out - of your Open edX LMS. - - - On the **IMS LTI 1.1 Consumer Launch** page, select **Recompute Launch - Data** and then select **Press to Launch**. - - The page that is configured for delivery to an unauthenticated user loads at - the bottom of the page. In the example that follows, the registration page - appears (that is, it was not configured to be skipped) and the learner is - prompted to complete required fields. - - .. image:: ../../Images/lti_test_auth.png - :alt: Screen shot of the IMS LTI 1.1 Consumer Launch page with the - registration page for the edX Edge loaded at the bottom. - -#. To test the workflow for a learner who already has a user account on your - Open edX system, follow these steps. - - - Use a separate browser window or tab to sign in to your Open edX LMS. - - - On the **IMS LTI 1.1 Consumer Launch** page, select **Recompute Launch - Data** and then select **Press to Launch**. - - Your Open edX user account is linked to the LTI provider configuration, and - your learner dashboard on the Open edX site loads at the bottom of the page. - To unlink your user accounts, select the arrow next to your username, and - then select **Account**. In the **Connected Accounts** section, select - **Unlink** next to the LTI provider configuration name. - - -.. include:: /links.txt - - -**Maintenance chart** - -+--------------+-------------------------------+----------------+--------------------------------+ -| Review Date | Working Group Reviewer | Release |Test situation | -+--------------+-------------------------------+----------------+--------------------------------+ -| | | | | -+--------------+-------------------------------+----------------+--------------------------------+ diff --git a/source/site_ops/install_configure_run_guide/configuration/tpa/tpa_providers.rst b/source/site_ops/install_configure_run_guide/configuration/tpa/tpa_providers.rst index 3e54ecd0a..628ac0c1e 100644 --- a/source/site_ops/install_configure_run_guide/configuration/tpa/tpa_providers.rst +++ b/source/site_ops/install_configure_run_guide/configuration/tpa/tpa_providers.rst @@ -75,12 +75,10 @@ and configure each of the three organizations to be identity providers, you permit learners who have valid user credentials at any of those organizations to access the Open edX site. -If you are using :ref:`edX as an LTI tool provider` to a external learning management system -or application, you can set up an authentication workflow between your Open -edX site and the system that is the LTI tool consumer. For more information, -see :ref:`Options for LTI Authentication and User Provisioning` and -:ref:`Configuring Open edX for LTI Authentication`. +If you are using :ref:`your Open edX instance as an LTI tool provider` to an external learning management system, +you can control how learners are authenticated during LTI launches. For more +information, see :ref:`Authentication Modes`. .. include:: /links.txt