Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PADV-412: Add LTI 1.3 re-usable configuration ADR #5

Open
wants to merge 6 commits into
base: pearson-release/olive.main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions docs/decisions/0008-lti-1p3-puggable-lti-configuration.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
PADV-412: LTI 1.3 Pluggable and re-usable LTI configuration
Squirrel18 marked this conversation as resolved.
Show resolved Hide resolved
===========================================================

Status
======

Proposal

Context
=======

In this discovery, we will describe a possible approach to add LTI 1.3 support
for pluggable and re-usable LTI configurations on the lti_store plugin and
xblock-lti-consumer XBlock.

The #239 issue on xblock-lti-consumer [4]_ added support for LTI 1.1
pluggability, on the Open edX roadmap ticket #143 [1]_, related to the feature
of external pluggable LTI configuration, there was planned implementation for
LTI 1.3 support, according to comments on #210 [3]_, progress on this effort
has been stopped, currently, the remaining efforts to reach LTI 1.3 support are:

- Expand the plugin support to allow storing and retrieval of LTI 1.3
configuration
- Update the LTI Consumer to use the configuration from the filter pipeline to
load an external LTI tool using LTI 1.3 spec
- Remove XBlock dependencies from LTI 1.3 launches (features related to LTI 1.3
authentication, for example, the keyset URL and the token URL).

Why do we need this?
====================

This feature is important because it will allow us to eliminate the need to
configure multiple LTI tools for each LTI 1.3 consumer XBlock (course authors
may not have access to deploy LTI 1.3 tools) and allow LTI 1.3 consumer XBlock
to share a common configuration, this will also allow for multi-tenancy model
compatibility on the platform and ease the maintenance of courses that heavily
depend on many LTI 1.3 XBlocks. We will also be able to use CCX XBlocks that
use LTI 1.3 since the CCX XBlocks would not have a separate configuration from
its master course counterpart.

General Approach
===============

We will need to modify the lti_store plugin and xblock-lti-consumer to include
these changes:

Changes on xblock-lti-consumer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Modify xblock-lti-consumer to allow setting the
"LTI Reusable Configuration ID" field and add the "Reusable Configuration"
option to the "Configuration Type" field on XBlocs using LTI 1.3 version.
- Modify the _get_lti_1p3_consumer method on the LTI configuration model to use
the values from the external configuration when enabled.
- Modify the get_lti_1p3_launch_info function to show the values from the
external configuration on the author view.

Note: We aren't completely clear on what might need to change appart from
_get_lti_1p3_consumer and get_lti_1p3_launch_info in xblock-lti-consumer
to allow the use of LTI 1.3 external configurations.

We also need to modify the LtiConfiguration model to sync the changes on
the config store field and external ID field on all CCX XBlocks related to
the master courser XBlock beign modified, this could be achieved by two method,
first by copying the config store and external ID values when a CCX XBlock
LtiConfiguration is beign created and by also sync changes from the master
LtiConfiguration with a post save signal, in that signal we can iterate over
any CCX LtiConfiguration related and sync the config ID and external ID values.

Changes on lti_store
~~~~~~~~~~~~~~~~~~~~

- Add LTI 1.3 fields to lti_store ExternalLtiConfiguration model for the
client ID, private key, private key ID, public key or keyset URL, and
deployment id.
- Add LTI 1.3 has a version choice on ExternalLtiConfiguration model.
- Add a clean method to ExternalLtiConfiguration model to avoid mixing LTI 1.1
and LTI 1.3 fields.
- Add an access token view to lti_store for LTI 1.3 external configurations.
- Add a keyset view to lti_store for LTI 1.3 external configurations.

Note: The private key ID on the LTI 1.3 external configuration model can be an
auto-generated uuid4, just as how it's already being done on the
_generate_lti_1p3_keys_if_missing method on the LtiConfiguration model in
xblock-lti-consumer.

References
==========

.. [1] #143 Open edX Roadmap - Central Management of LTI Configuration: https://github.com/openedx/platform-roadmap/issues/143
.. [2] Pluggable and re-usable LTI configuration ADR: https://github.com/openedx/xblock-lti-consumer/blob/469d47dd2b3f1f742da429a64108b5a4ff03165d/docs/decisions/0006-pluggable-lti-configuration.rst
.. [3] #210 Pluggable/reusable LTI configuration: https://github.com/openedx/xblock-lti-consumer/pull/210
.. [4] #239 Support for external LTI configurations using openedx-filters: https://github.com/openedx/xblock-lti-consumer/pull/239
.. [5] Openedx LTI Store: https://github.com/open-craft/openedx-ltistore
.. [6] #273 Remove XBlock location dependencies from LTI 1.3 launches: https://github.com/openedx/xblock-lti-consumer/issues/273