Integration with your learning management system is accomplished through the use of the Learning Tools Interoperability (LTI) standard. This allows external systems like Concourse to easily plug into your LMS.
At its core, LTI provides three important capabilities when joined to Concourse. The first is single sign-on from the LMS to Concourse upon tool launch. The second is information about the course, so we know to precisely which syllabus to direct the user to. The third is registration information, which determines whether the user is a student, instructor, or guest, which correlates to permissions. With all three of these pieces in place, the experience of moving between the LMS and Concourse is seamless.
When setting up an LTI connection, it is helpful to understand some more of the terminology:
- Consumer: This refers to the system initially creates LTI request. In most cases this will refer to your LMS.
- Provider: This is the external system that is being integrated "into" the LTI consumer. In this case Concourse is considered the LTI provider.
- URL: This is the link to which the LTI launch is made. With Concourse it will be https://yourdomain.campusconcourse.com/.
- Shared Key: This is a unique key known by both systems that is used to identify the consumer making the request.
- Shared Secret: This is a unique secret known by both systems that is used in combination with the key to validate the launch.
- Additional Parameters: These may include options for launch containers, secure modes, and custom configurations.
- User: This is the user whose information will be passed during the launch. It can come in multiple forms, which are described later in this post.
- Context: This is the course that will be passed during the launch. It can come in multiple forms, which are described later in this post.
Now that you understand the players and terminology, setting up LTI integration for Concourse is a simple process.
Setting up Concourse
The first is to configure Concourse as your provider. To do this visit Admin > System > Integration. This will only be available to Concourse system administrators.
From there you can add any number of LTI consumers and select configuration options for each. This can be very helpful if you manage multiple learning systems or want to also provide access through a portal solution. Simply enter (and remember) a key and secret for each consumer tool, select whether and which user and course identifier you want to consider, and if you want users and/or courses to be automatically created or through feed processing. You also have the option to select which navigation tools are hidden when launching Concourse from your LMS. Selecting Show > Main Navigation will allow users to see the navigation bar at the top of the page. Selecting Show > Secondary Navigation will allow users to see the syllabus menu bar, and selecting Show > Footer will allow users to see the footer containing time zone information, time, and support links.
Setting up your LMS
The second half of configuration is on the side of the learning system. The setup will be different for each LMS, but the premise remains the same. Normally referred to as an external tool, you will need to enter the launch URL (https://yourdomain.campusconcourse.com/) and the shared key and secret you entered in Concourse.
Once you've done this, the Concourse external tool should be made available for use within your LMS courses.
Selecting LTI options
At this point, you are almost ready to rock. However you first need to make sure that the setup has been properly configured. This will also yield insight as to what Concourse LTI parameters need to be set to in order to utlize the available output. To do this, you should add debug=1 as a custom LTI parameter within your consumer. Then when you launch Concourse you should see an array like the following displayed by your LMS. if you do not see this array when using debug mode, please go back and check your configuration parameters or consider using a debugging tool like Apidapter.
[context_id] => _1359_1
[context_label] => Testing_Example
[context_title] => Testing_Example
[custom_debug] => 1
[lis_course_offering_sourcedid] => blackboard.institution.com:SP2015-TESTING-EXAMPLE
[lis_course_section_sourcedid] => blackboard.institution.com:SP2015-TESTING-EXAMPLE-01
[lis_person_contact_email_primary] => firstname.lastname@example.org
[lis_person_name_family] => Faculty
[lis_person_name_full] => Bbtest Faculty
[lis_person_name_given] => Bbtest
[lis_person_sourcedid] => bbtest_faculty
[oauth_signature_method] => HMAC-SHA1
[oauth_signature] => nOK0W0EAytCYntetoUDbn37Tm3E=
[oauth_timestamp] => 1339437085
[oauth_version] => 1.0
[resource_link_id] => _4037622_1
[resource_link_title] => Concourse Syllabus
[roles] => urn:lti:role:ims/lis/Instructor
[user_id] => _140370_1
*Note: Not every LMS will generate the same set of LTI parameters. This is why it is often beneficial to introduce integration middleware like Apidapter to handle the mapping and adjustment of parameters on-the-fly. This is something the LMS providers are constantly working on, and a summary of their progress can be found on the IMS site.
While many of these LTI parameters can be ignored, some of the values may look familiar to you. The parameters that often contain the values Concourse depends on are highlighted in bold above. What is essential to making integration work fully is the ability to uniquely identify the user and the course from the LTI launch.
*Note: LTI launches can still work even if only the user or course parameter is provided. If the user is known but not the course, the user will be logged in and directed to the dashboard. Conversely, if the course is known but the user is not found, they will be shown the public view of the course.
The simplest and fastest way to integrate Concourse into your LMS is to use the auto create options for both users and courses and then rely on Apidapter to map the values for the [context_id] and [user_id] parameters to the LTI standard [lis_person_sourcedid] and [lis_course_offering_sourcedid] parameters respectively. This option should only be used if you are never planning on using feed processing to populate users and courses in your system since these context and user IDs are opaque and only used internally by the LMS database.
The optimal solution is to rely on a combination of Learning Information Services (LIS) and role parameters to provide the necessary user and course information. In this case you are generally looking for parameters that can also be generated by and coordinated with your student information system (SIS) if and when feeds are implemented.
In other words, you need to make sure that the external user and course IDs that would be contained in your feeds can be matched to one of the available parameters above. For example, your array may show [lis_person_sourcedid] as ksmith3. If this is the unique user identifier for your campus, you can pass this LTI option to Concourse and put said external user IDs in your feed.
Identifying courses can be done in a similar manner with the [lis_course_offering_sourcedid] or [lis_course_section_sourcedid] parameters. In the first case this will match a Concourse's external course ID whereas the second will match a external section IDs.
[roles] relates to the given role of the user within the specific LMS course, such as Learner or Instructor. Users will be automatically registered for their course in the "highest" matching group upon each launch as described by Role Mapping.
Please see our detailed guide to understanding LTI errors and resolutions. This is particularly helpful when using auto user and/or course creation.
A few last points should be kept in mind when integrating using LTI.
1) In order for an LTI launch to succeed, the user must be set to use external authentication. This is done by setting INTERNAL_USER to 0 manually or when processing the user feed. In addition auto created users will automatically be set internal authentication to false. Do note that the given user will no longer be able to log in to the application directly once they are considered externally authenticated.
2) In many cases it will be advantageous to utilize a middleware tool like Apidapter to support LMS (and other) integration. Even if you are able to map the parameters and equate the values natively it is still beneficial to have a tool for logging transactions, debugging, and sharing integration responsibility. In the case Apidapter is used the only difference is that you would first point your LMS at an adapter and then point the adapter back to Concourse. This also implies the use of two pairs of keys and secrets.
3) There is much more to learn about LTI, so to continue with the technical details capabilities of Concourse and LTI in general, continue with this article.
We realize that integration is one of the most challenging topics to Concourse setup but hope that this article arms you with all the information you need to integrate Concourse quickly and effectively. As always, feel free to write us if you have any questions about setting Concourse up with your LMS.