Best Practices for Managing ID's in LTI

Best Practices for Managing ID's in LTI®


Learning Tools Interoperability® (LTI) messages use opaque values as unique identifiers for objects such as users and courses. This can cause issues for Tool Providers which have been pre-provisioned with such data as they will likely have different identifiers from those passed in LTI messages. To solve this problem, Tool Providers can take advantage of the sourceid parameters available in LTI messages. These parameters are based on the Learning Information Services (LIS) specification which contain the values used to provision other systems. Tool Providers can use these values to match the objects they have already created.

IDs in launch messages

An LTI launch message can be used to provide the receiving Tool Provider with unique (within the scope of the sending Tool Consumer) values to represent the user making the launch, the resource link from which the launch originated, and the context (typically the course) in which the link resides. These values are passed using the following parameter names:

  • user_id
  • resource_link_id
  • context_id

although they may also be passed in custom parameters when the following substitution variables are used:

  • $
  • $
  • $ (or $

Each of these values is defined with the LTI specification as being an "opaque unique identifier". That is, their values are determined by the Tool Consumer and have no meaning outside that scope.

In most cases the opaqueness of the values is not an issue for Tool Providers; they merely need a unique ID which can be used to identify each object: user, resource link, context. The actual value is not important provided it is unique. However, there are also cases where Tool Providers have been pre-provisioned with data about users and courses, for which this opaqueness can be problematic. The IDs used for users and courses in the data received from the provisioning system (for example, a Student Information System or SIS) will almost certainly not be the same as the values supplied in an LTI launch message as these values are known only to the Tool Consumer (for example, an LMS). Furthermore, the LTI user_id value will be different for the same user when launching from different Tool Consumers (for example, two different LMSs being used by the same institution). However, do not despair, all is not lost! This is where the sourcedid values come in.

Using sourcedid values

The LTI specification recognizes that there are times when a Tool Consumer needs to pass on a more widely recognized identifier for a user or course. The following message parameters are provided for this purpose:

  • lis_person_sourcedid
  • lis_course_section_sourcedid

These are defined as being the LIS identifiers for the objects - that is, the identifiers from the system which was used to provision the Tool Consumer. If both the Tool Consumer and the Tool Provider have been provisioned with the same values, then these launch parameters will allow the latter to match up users and courses. These parameters must be supported by Tool Consumers before they are able to pass certification for LTI 1.2 (or higher).

It is important to note, however, that whilst the sourcedid values should be unique, there is no guarantee that every object will have a value. A value is only likely to be available for those users and courses which have been provisioned by another system, typically an SIS. If a user is added manually to the Tool Consumer then they are not likely to have a sourcedid value. For example, this could apply to the default system administrator user account, or to external examiners who are given access to the LMS. This should not be a problem for Tool Providers because they should expect to receive a sourcedid value for all provisioned users and courses; it is just ad-hoc users and courses for which this value may be missing.

A note on LIS terminology

LIS defines three course-related entities:

  • Course template
  • Course offering
  • Course section

A course template is the abstract course which is independent of when it is taught. A course offering relates to the specific period of time when the course is available. A course section is the specific instance into which students are enrolled and taught. The course template may have one or more course offerings, each of which may have one or more course sections. Whilst LTI provides a parameter for passing the LIS course offering identifier (lis_course_offering_sourcedid) it does not name a standard parameter for the course template identifier. The latter can be passed using the custom parameter substitution variable named $CourseTemplate.sourcedId if this is supported by the Tool Consumer.

In the CSV version of OneRoster, the users.csv, courses.csv and classes.csv files uses the sourcedid value for the user, course template and course section as their primary key and so these values should be available to any Tool Providers which are being provisioned in this way.