Roles claim in LTI launches

Roles claim in LTI launches

LtiResourceLinkRequest requires roles claim and must contain at least one role URI from the published role vocabularies.

IMS 1.3 spec lists 3 role vocabularies (link) but does NOT limit their use to specific conditions.

  1. System roles

  2. Institution roles

  3. Context roles

Spec further subdivides each of these into core and non-core URIs.

In the launch claim example in the spec (link), the roles claim contains 3 array elements, 1 from institution roles and 2 from context roles.

"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "07940580-b309-415e-a37c-914d387c1150", "https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest", "https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0", ========================================================================== ========================================================================== "https://purl.imsglobal.org/spec/lti/claim/roles": [ "http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student", "http://purl.imsglobal.org/vocab/lis/v2/membership#Learner", "http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor"], ========================================================================== ========================================================================== "https://purl.imsglobal.org/spec/lti/claim/role_scope_mentor": [ "fad5fb29-a91c-770-3c110-1e687120efd9", "5d7373de-c76c-e2b-01214-69e487e2bd33", "d779cfd4-bc7b-019-9bf1a-04bf1915d4d0" ], "https://purl.imsglobal.org/spec/lti/claim/context": { "id": "c1d887f0-a1a3-4bca-ae25-c375edcc131a", "label": "ECON 1010", "title": "Economics as a Social Science", "type": ["http://purl.imsglobal.org/vocab/lis/v2/course#CourseOffering"] }, "https://purl.imsglobal.org/spec/lti/claim/resource_link": { "id": "200d101f-2c14-434a-a0f3-57c2a42369fd", "description": "Assignment to introduce who you are", "title": "Introduction Assignment" }, "https://purl.imsglobal.org/spec/lti/claim/tool_platform": { "guid": "ex/48bbb541-ce55-456e-8b7d-ebc59a38d435", "contact_email": "support@platform.example.edu", "description": "An Example Tool Platform", "name": "Example Tool Platform", "url": "https://platform.example.edu", "product_family_code": "ExamplePlatformVendor-Product", "version": "1.0" }, "https://purl.imsglobal.org/spec/lti/claim/target_link_uri": "https://tool.example.com/lti/48320/ruix8782rs", "https://purl.imsglobal.org/spec/lti/claim/launch_presentation": { "document_target": "iframe", "height": 320, "width": 240, "return_url": "https://platform.example.edu/terms/201601/courses/7/sections/1/resources/2" }, "https://purl.imsglobal.org/spec/lti/claim/custom": { "xstart": "2017-04-21T01:00:00Z", "request_url": "https://tool.com/link/123" }, "https://purl.imsglobal.org/spec/lti/claim/lis": { "person_sourcedid": "example.edu:71ee7e42-f6d2-414a-80db-b69ac2defd4", "course_offering_sourcedid": "example.edu:SI182-F16", "course_section_sourcedid": "example.edu:SI182-001-F16" }

Open edX implementation

In the implementation here, we see 2 kinds of available mappings:

  1. LTI_1P3_ROLE_MAP

  2. LTI_1P3_CONTEXT_ROLE_MAP

LTI_1P3_ROLE_MAP = { 'staff': [ 'http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator', 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor', ], 'instructor': [ 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor', ], 'student': [ 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student' ], 'guest': [ 'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student' ], } # Context membership roles # https://www.imsglobal.org/spec/lti/v1p3/#lis-vocabulary-for-context-roles LTI_1P3_CONTEXT_ROLE_MAP = { 'staff': [ 'http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator', ], 'instructor': [ 'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor', ], 'student': [ 'http://purl.imsglobal.org/vocab/lis/v2/membership#Learner', ], }

The following table is generated by performing launch of IMS global test suite with different course roles in Open edX.

Note that LTI_1P3_CONTEXT_ROLE_MAP does NOT seem to be used in roles claim at all.

Course role

Current URIs in roles claim

Course role

Current URIs in roles claim

Course Admin

/institution/person#Instructor (non-core)

Course Staff

/system/person#Administrator (core)

/institution/person#Instructor (non-core)

Limited Staff

/system/person#Administrator (core)

/institution/person#Instructor (non-core)

None

/institution/person#Student (core)

All other roles

/institution/person#Student (core)

This raises a few problems.

Problems

1. Limited support for core roles

The spec states:

Core roles are those which are most likely to be relevant within LTI and hence vendors should support them by best practice. Vendors may also use the non-core roles, but they may not be widely used.

However, as we see in the table above, very few core roles are used. For example, Course Admin is mapped to only 1 role and that too is non-core.

2. Integration failure: TurnItIn

Abstract Technology, an Open edX partner, tried integration with TurnItIn. They learned from the team at TurnItIn that the tool is looking for /membership#Learner in role claim in the LTI request with student role. But the platform’s request ONLY contains /institution/person#Student. So the launch fails.

{ "https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest", "https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0", "https://purl.imsglobal.org/spec/lti/claim/deployment_id": "1", "https://purl.imsglobal.org/spec/lti/claim/target_link_uri": "https://lti-ri.imsglobal.org/lti/tools/5878/launches", "https://purl.imsglobal.org/spec/lti/claim/roles": [ "http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student" ], "https://purl.imsglobal.org/spec/lti/claim/resource_link": { "id": "block-v1:edx+LTI101+2026+type@lti_consumer+block@cf1b149fc06d4bf2b568e626bb09415e" }, "https://purl.imsglobal.org/spec/lti/claim/launch_presentation": { "document_target": "iframe" }, "https://purl.imsglobal.org/spec/lti/claim/context": { "id": "course-v1:edx+LTI101+2026", "type": [ "http://purl.imsglobal.org/vocab/lis/v2/course#CourseOffering" ], "title": "LTI testing - aayub - edx", "label": "course-v1:edx+LTI101+2026" }, "https://purl.imsglobal.org/spec/lti/claim/tool_platform": { "guid": "76834479-ae8b-5249-a190-842b90f777ee", "name": "Ulmo" }, "https://purl.imsglobal.org/spec/lti/claim/custom": { "quiz_id": "az-123", "duedate": "2026-02-08T07:09:21+00:00" }, "https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": { "scope": [ "https://purl.imsglobal.org/spec/lti-ags/scope/lineitem", "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", "https://purl.imsglobal.org/spec/lti-ags/scope/score" ], "lineitems": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/lti-ags", "lineitem": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/lti-ags/11" }, "https://purl.imsglobal.org/spec/lti-nrps/claim/namesroleservice": { "context_memberships_url": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/memberships", "service_versions": [ "2.0" ] } }

Proposed solution

Following the spec, we should include at least core roles from all 3 vocabularies in the roles claim. This will enable TurnItIn integration and avoid potential problems with other tools.

Here’s the proposed new mapping. Including a non-core role /institution/person#Instructor will include backwards compatibility incase any tools have already adopted to Open edX’s use of this role.

Vocabulary

Core role URIs

Open edX course roles

Course Admin

Course Staff

Limited Staff

Student & other roles

System

/system/person#Administrator

 

 

 

/system/person#None

 

Institution

/institution/person#Administrator

 

 

 

/institution/person#Staff

 

 

/institution/person#Faculty

 

 

/institution/person#Student

 

 

 

/institution/person#Guest

 

 

 

 

/institution/person#Other

 

 

 

 

/institution/person#None

 

 

 

 

/institution/person#Instructor (non-core)

 

 

Membership

/membership#Administrator

 

 

 

/membership#Instructor

 

 

/membership#Mentor

 

 

 

 

/membership#ContentDeveloper

 

 

 

 

/membership#Learner

 

 

 

Another view for proposed mapping.

Course role

Proposed URIs in roles claim

Course role

Proposed URIs in roles claim

Course Admin

/system/person#Administrator (System - core)

/institution/person#Administrator (Institution - core)

/membership#Administrator (Membership - core)

/institution/person#Instructor (Institution - non-core)

Course Staff

/system/person#None (System - core)

/institution/person#Staff (Institution - core)

/institution/person#Faculty (Institution - core)

/membership#Instructor (Membership - core)

/system/person#Administrator (core)

/institution/person#Instructor (Institution - non-core)

Limited Staff

/system/person#None (System - core)

/institution/person#Staff (Institution - core)

/institution/person#Faculty (Institution - core)

/membership#Instructor (Membership - core)

/system/person#Administrator (core)

/institution/person#Instructor (Institution - non-core)

None

/system/person#None (System - core)

/institution/person#Student (Institution - core)

/membership#Learner (Membership - core)

All other roles

/system/person#None (System - core)

/institution/person#Student (Institution - core)

/membership#Learner (Membership - core)